Вот мой аспект:Использование 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 не работать?