问题标签 [postsharp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
502 浏览

c# - 如何拦截、解析和编译?

这是我一段时间以来一直在努力解决的问题。我需要一种方法,要么在编译时用模板中的解析代码替换方法中的代码(想到 PostSharp),要么创建动态代理(Linfu 或 Castle)。所以给出这样的源代码

我需要把它编译成这个

使用什么技术并不重要。我尝试使用 PostSharp 的 ImplementMethodAspect,但一无所获(由于缺乏经验)。我还研究了 Linfu 框架。有人可以建议一些其他方法或方法来做到这一点,我真的很感激。我的整个项目都依赖于此。

假设:

  1. 代码可以出现在任何类中。
  2. 模板代码将始终使用属性 [Template] 进行注释
  3. 模板方法将始终返回字符串。

将代码从一种形式解析到另一种形式已经完成。现在我只需要一种方法来替换它。

“牛肉”示例:

0 投票
2 回答
233 浏览

c# - 这是对“PostSharp 抱怨 CA1800:DoNotCastUnnecessarily”的最佳修复吗?

这个问题是关于铸造中的“是”“作为”以及关于CA1800 PostSharp规则的问题。我想知道我认为的解决方案是否是最好的解决方案,或者它是否有任何我看不到的问题。

我有这个代码(命名为原始代码并减少到最低相关)。ValidateSubscriptionLicenceProducts 函数尝试通过强制转换并稍后检查一些内容(在 //Do What 中)来验证 SubscriptionLicence(可能是 3 种类型:Standard、Credit 和 TimeLimited)。

PostSharp 抱怨 CA1800:DoNotCastUnnecessarily。原因是我将同一对象两次转换为同一类型。此代码在最佳情况下将转换 2 次(如果它是 StandardLicence),在最坏情况下将转换 4 次(如果它是 TimeLimited 许可证)。我知道有可能使规则无效(这是我的第一种方法),因为这里的性能没有太大影响,但我正在尝试一种最佳方法。

这是使用"as"的改进版本。不要抱怨 CA1800,但问题是它总是会投射 3 次(如果将来我们有 30 或 40 种类型的许可证,它可能会表现不佳)

但后来我想了一个最好的。这是我正在使用的最终版本。

它需要更改 StandardSubscriptionLicence、CreditSubscriptionLicence 和 TimeLimitedSubscriptionLicence 类以具有“tryparse”方法(在下面的代码中复制)。这个版本我认为它最少只能投射一次,最多只能投射三个。改进2你怎么看?有没有最好的方法呢?

0 投票
1 回答
1549 浏览

asp.net - 根据方法名称过滤 log4net - 不太明白

我正在使用 log4net 记录我的网络应用程序的进度,使用 Log4PostSharp 对所有方法进行 AOP 注入。这具有记录(几乎)所有内容的预期效果,并且很好。

我现在需要将 JUST Page_Load 方法记录到文件/控制台。我显然可以限制 log4postsharp 类来做到这一点,但是我会丢失所有其他日志记录。

我一直在查看 log4net 中的过滤器,从 StringMatch 过滤器开始,但这只查看正在记录的消息,并且我在方法名称之后。这让我进入了 PropertyFilter,但仍然没有喜悦。因此,我的 log4net.config 片段是:

如您所见,我试图通过 LocationInfo 键入记录事件的 MethodName,但我仍在记录所有内容。编辑:正如评论中提到的,我现在已经包含了我在 RTFM 之后添加的 DenyAllFilter ;-)

有人可以帮忙吗?

谢谢,

迈克·K。

0 投票
1 回答
3208 浏览

c# - 您如何反映应用于返回值的属性?

考虑以下:

如何使用 System.Reflection 看到 NotNullAttribute 属性已应用于方法的返回值?如果不能,那么 [return: ] 语法背后的目的是什么?

0 投票
1 回答
341 浏览

wcf - PostSharp 使用 DataContractSerializer 时?

我有一个在类上实现 INotifyPropertyChanged 的​​方面。该方面包括以下内容:

当我正常实例化类时,这工作正常,但是当我使用 DataContractSerializer 反序列化类时遇到问题。这绕过了构造函数,我猜这会干扰 PostSharp 设置自己的方式。这最终导致在拦截的属性设置器中出现 NullReferenceException,但在它调用自定义 OnPropertySet 之前,所以我猜它会干扰设置 LocationInterceptionArgs。

有没有其他人遇到过这个问题?有没有办法解决它?


我做了一些更多的研究,发现我可以通过这样做来解决这个问题:

我想,好吧,这还不错,所以我尝试在我的方面做到这一点:

不幸的是,即使它正确地拦截了该方法,它也不起作用。我认为对 InitializeCurrentAspects 的调用没有正确转换,因为它现在位于 Aspect 内部,而不是直接位于方面增强类内部。有没有一种方法可以让我完全自动化,这样我就不必担心在我想要拥有 Aspect 的每个类上调用它?

0 投票
1 回答
1408 浏览

.net - 构建后删除 PostSharp 引用?

是否可以让 postsharp 在构建期间删除对 postsharp 程序集的引用?

我有一个 exe,我需要占用很小的空间。我想使用 postsharp 的一些编译时间编织,但不想必须使用 exe 部署 PostSharp.dll。

我正在使用 PostSharp 2(特别是 2.0.4.1074)

0 投票
3 回答
215 浏览

postsharp - Postsharp 安装程序错误:未提供 .Net 2.0

PostSharp 1.5 和 2.0 存在一个问题,不允许您在 Windows 7 计算机上安装它,并显示错误消息“.NET Framework 2.0 is not present on this computer”。

0 投票
1 回答
314 浏览

.net - PostSharp 缓存示例不在示例解决方案之外工作

PostSharp 的缓存示例项目有效,但是当我复制所有类并尝试在我自己的解决方案中复制它时,缓存不会发生。但是构建并没有失败,所以肯定有什么事情发生了。有小费吗?

0 投票
2 回答
534 浏览

asp.net-mvc - asp.net mvc log4postsharp

嗨,我正在尝试使用 log4post sharp 进行日志记录,据我所知,我已按照说明启动并运行它,但我没有安装 postsharp,而是获取了库文件并修改了我的 cs proj 文件以定位那些文件,我也尝试在我的机器上安装 postsharp。无论哪种情况,我都会遇到此错误

错误5 未找到“Log4PostSharp.LogAttribute”类型所需的插件“Log4PostSharp”。

我试过用谷歌搜索,似乎在网络上的任何地方都没有这个问题的痕迹。

我的实现与其他示例的一个区别是他们使用的 postsharp dll 是 PostSharp.public,我的只是 PostSharp。我曾尝试搜索以前的 dll,但在任何地方都找不到,下载仅包含 PostSharp.dll。我觉得这可能是问题所在,因为我已经按照这封信的所有说明来启动和运行它。任何想法的人?

0 投票
1 回答
1988 浏览

c# - Postsharp 中的 AssemblyLoadException,来自引用的 DLL 的参数有问题吗?

我刚开始使用 postsharp/AOP。我想为 C# 做一些工具来跟踪我为一些软件编写的一些插件的使用情况。

我正在尝试使用 OnMethodBoundaryAspect 类来记录调用方法时某些参数的值。这些参数是在外部 DLL 中引用的类型。

当我将我的属性添加到方法中时,项目将无法构建,我收到以下错误

错误 2 未处理的异常(2.0.5.1204、64 位、CLR 2.0、发布):PostSharp.CodeModel.AssemblyLoadException:加载程序集“C:\Program Files\Autodesk\Revit Structure 2011\Program\RevitAPI.dll”时出错:可以不加载文件或程序集 'revitapi, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。不支持操作。(来自 HRESULT 的异常:0x80131515)

REvitAPI.dll 是其中包含类型的文件。我还测试了只是将属性添加到项目中,但没有将其应用于任何方法,这也会导致错误。所以看起来它与方法参数类型本身无关,而只是这个DLL的存在。

以前有没有人遇到过这个问题,或者任何人都可以指出我在哪里获得更多信息的正确方向?