2015-09-24 3 views
2

Вот мой аспект:Использование PostSharp, не в состоянии получить Multicast работать для управления WinForm обработчик щелчка

namespace AspectExtentions 
{ 
    [MulticastAttributeUsage(MulticastTargets.Method | MulticastTargets.InstanceConstructor | MulticastTargets.StaticConstructor, TargetMemberAttributes = MulticastAttributes.Instance, AllowMultiple = true)] 
    [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, AllowMultiple = true)] 
    [Serializable] 
    public class LoggingAspect : OnMethodBoundaryAspect , IAspectProvider 
    { 
    ..... code not important 
    } 
} 

Он используется в:

namespace SynonymRedirector 
{ 
    partial class Form1 : Form, IMainView 
    { 
     [LoggingAspect] 
     private void ubCreateSynonyms_Click(object sender, EventArgs e) 
     { 
     .... code not important 
     } 
     .... 
    } 
} 

Это, кажется, работает, как ожидалось: Тем не менее, я хотел бы удалить этот атрибут и использовать MultiCast для определения точечного сокращения:

У меня определено следующее: (In SynonymRedirector.psproj)

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.postsharp.org/1.0/configuration"> 
    <Multicast xmlns:my="clr-namespace:AspectExtentions;assembly:AspectExtentions"> 
    <my:LoggingAspect AttributeTargetTypes="SynonymRedirector.Form1.ubCreateSynonyms_Click" AttributeTargetMemberAttributes="Private" /> 
    </Multicast> 
</Project> 

Я также следующие определенные: (В AssemblyInfo.cs)

[assembly: AspectExtentions.LoggingAspect(AttributeTargetMembers = "SynonymRedirector.Form1.ubSaveToFiles_Click", AttributeTargetElements = PostSharp.Extensibility.MulticastTargets.Method)] 

Однако, по сборке с этим не заметил, я получаю следующее сообщение об ошибке:

Attribute 'AspectExtentions.LoggingAspect' is not valid on this declaration type. It is only valid on 'method' declarations. C:\Projects\ProofOfConcept\SynonymRedirector\SynonymRedirector\Properties\AssemblyInfo.cs 18 12 SynonymRedirector 

PostSharp, кажется, настроен правильно, поскольку на сборке создается следующее:

Compile complete -- 0 errors, 10 warnings 
    : message : PostSharp 4.1 [4.1.24.0, postsharp.srv.4.0-x86.exe, CLR 4.0.30319.379893, Release] complete -- 0 errors, 0 warnings, processed in 261 ms 
    SynonymRedirector -> C:\Projects\ProofOfConcept\SynonymRedirector\SynonymRedirector\bin\Debug\SynonymRedirector.exe 
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== 

Я использую бесплатную версию PostSharp, но, согласно веб-сайту, Multicast должен быть доступен.

Я также заметил, что когда у меня есть аспект, настроенный как атрибут метода обработчика события клика, и я делаю сборку, я получаю много комментариев PostScript (предупреждения). Однако, когда я комментирую атрибут и выполняю сборку, я получаю только простую информацию компиляции PostScript. Похоже, что генерация кода PostScript в этом случае не выполняется. Не знаю, почему это так.

Итак, мой вопрос: как мне настроить этот атрибут, чтобы я мог установить точку в XML с помощью Multicast? Что у меня некорректное в файлах SynonymRedirector.psproj или AssemblyInfo.cs, которые заставляют Multicast не работать?

ответ

0

Пришлось сделать так, как была создана сборка. Изменено на:

[assembly: AspectExtentions.LoggingAspect(AttributeTargetMembers= "ubCreateSynonyms_Click", 
              AttributeTargetTypes = "SynonymRedirector.Form1")] 

 Смежные вопросы

  • Нет связанных вопросов^_^