Tag: postsharp

如何基于条件退出PostSharp方面的OnEntry方法中的方法

我希望方面基于如下条件退出方法调用: [AttributeUsage(AttributeTargets.Method)] public class IgnoreIfInactiveAttribute : OnMethodBoundaryAspect { public override void OnEntry(MethodExecutionEventArgs eventArgs) { if (condition) { **// How can I make the method return here?** } } } 任何帮助非常感谢。

哪些工具执行IL的后编译修改?

最近提到的PostSharp让我想起了这个: 去年我工作的地方,我们正在考虑使用PostSharp将检测注入我们的代码中。 这是在Team Foundation Server团队构建/持续集成环境中。 考虑到这一点,我对PostSharp的操作方式产生了一种唠叨的感觉 – 它编辑了编译器生成的IL。 这让我感到困扰。 我并不担心PostSharp不能正常工作; 我很担心这是我第一次回忆起这样的工具。 我担心其他工具可能不会考虑到这一点。 事实上,随着我们前进,我们确实遇到了一些问题,因为PostSharp对原始IL所处的文件夹感到困惑。这打破了我们的构建。 它似乎是由于与MSBUILD目标的冲突解决了项目引用。 冲突似乎是由于PostSharp使用临时目录来存储IL的未修改版本。 无论如何,我当时没有StackOverflow来引用! 既然我这样做了,我想问你们所有人是否知道编辑IL作为构建过程的一部分的任何其他工具; 或者Microsoft是否在Visual Studio,MSBUILD,Team Build等中考虑了这种工具。 更新:感谢您的回答。 最重要的是,至少在VS 2010中,微软真的应该意识到这种事情会发生。 因此,如果在VS2010中存在这方面的问题,那么微软可能会分担责任。

PostSharp后pdb文件正在酝酿之中

我正在使用PostSharp版本2.1.6.4(也尝试了最新版本2.1.7.35),有时pdb文件丢失,并且有一个pssym文件。 我在构建过程中运行了procmon,据我所知, postsharp.srv.4.0-x86.exe进程将dll和pdb文件从obj\Debug文件夹移动到obj\Debug\Before-PostSharp文件夹,然后生成一个obj\Debug文件夹中的新dll,但未生成新的pdb文件 。 对于我的一些dll(看似随机)会发生这种情况并且似乎不可靠,因为在其他机器上所有pdb文件都是正确生成的。

Postsharp:它是如何工作的?

根据我的另一个问题的建议,我转换了引用的代码用于PostSharp: 属性: [Serializable] public sealed class InitAttribute : OnMethodBoundaryAspect { public override void OnEntry(MethodExecutionEventArgs eventArgs) { Console.Write(“Works!”); } } static class Logger { public static string _severity; public static void Init(string severity) { _severity = severity; } [Init()] public static void p() { Console.WriteLine(_severity); } } 尽管如此,我无法获得任何结果(控制台上的“Works!”)。 PostSharp属性中的断点显示永远不会输入。 任何帮助? 提前致谢。

生成自定义编译时警告C#

我正在使用VS2008,并希望根据属性上的自定义属性创建编译时警告/错误(如果可能)。 目前有两个案例让我感兴趣: [MyAttribute (typeof(MyClass)] MyClass必须实现一个接口。 目前我在属性的构造函数中声明了这一点,但是由于堆栈跟踪的性质,这不容易跟踪: public MyAttribute (Type MyClassType) { System.Diagnostics.Debug.Assert(typeof(MyInterface).IsAssignableFrom(MyClassType), “Editor must implement interface: ” + typeof(MyInterface).Name); } 我感兴趣的第二种情况是我在属性中定义了一个类型,如果该类型实现了一个接口,那么如果另一个属性不存在则应该显示警告。 IE if(MyClass.Implements(SomeInterface)&&!Exists(SomeAttibute)){Generate Warning} [MyAttribute(typeof(MyClass)] // Comment next line to generate warning [Foo (“Bar”)] 谢谢!

如何使用PostSharp属性注入属性?

如何编写PostSharp方面以将属性应用于类? 我正在考虑的场景是需要使用DataContract属性进行修饰的WCF实体(或域对象)。 它还应该有一个Namespace属性。 像这样: using System.Runtime.Serialization; namespace MWS.Contracts.Search.V1 { namespace Domain { [DataContract(Namespace = XmlNamespaces.SchemaNamespace)] public class PagingContext { [DataMember] public int Page { get; set; } [DataMember] public int ResultsPerPage { get; set; } [DataMember] public int MaxResults { get; set; } } } } 在上面的例子中,您可以看到我想要输出的样子。 它具有应用于类的DataContract属性。 手工完成这项工作既乏味又不独特。 我真的只想写一个可以应用于我的“域”命名空间的方面。 然后它将为我应用序列化相关属性。 这样我就可以专注于开发实体对象,而不用担心序列化的细节。 我在PostSharp的网站上找到了用于在方法之前,之后和代替方法注入代码的文档。 然而,我正在寻找的是一种将属性注入类型的方法。 这是解决方案! […]