标签: postsharp

为什么编译后代码注入比预编译代码注入更好?

所以,我们都知道,C#没有一个类似C的宏预处理器(和有一个很好的线程为什么在这里).但是现在AOP正在获得牵引力,似乎我们开始使用后处理器(我们曾经使用过预处理器)做的事情(请记住,我只是在使用PostSharp,所以可能不在).

我是C#中属性的忠实粉丝,但是如果一个预处理器被遗漏了很多原因(作为一个前MFC用户,我仍然质疑但仍接受)为什么编译后代码注入比预先更好编译代码注入?

c# macros aop postsharp c-preprocessor

5
推荐指数
1
解决办法
3161
查看次数

postsharp exception为null

我对Postsharp有疑问.

我有这个:

 [Serializable]
 public class MethodConnectionTracking: OnExceptionAspect
 {
  public override void OnException(MethodExecutionArgs args)
        {
            base.OnException(args);
        }
 }
Run Code Online (Sandbox Code Playgroud)

我这样用过.在assemblyInfo.cs中:

[assembly: MethodConnectionTracking]
Run Code Online (Sandbox Code Playgroud)

所以,当程序集中发生异常时,它会执行OnException方法.但是,当我调试方法并且我看args(类型:MethodExecutionArgs)时,每个属性都有一个空值.args.Exception为null.我需要异常类型..

任何人都知道如何解决这个问题?

提前致谢

c# postsharp

5
推荐指数
0
解决办法
427
查看次数

如何应用Postsharp方面解决方案(命名空间中的所有类)

我正在尝试修改Postsharp附带的示例跟踪应用程序,以便将跟踪应用于我的命名空间中的所有类,而无需将[QuickTrace]显式放在每个类的顶部.我附上了截图.我究竟做错了什么 ?右键单击打开/查看图像以获得更大的图片.谢谢

在此输入图像描述

aop postsharp

5
推荐指数
1
解决办法
2101
查看次数

PostSharp将k__Backing字段插入实体类,导致数据库生成失败

我正在使用C#中的Microsoft Entity Framework和CodeFirst创建数据库.我想在WPF应用程序中使用数据库,因此实体类应该实现"INotifyPropertyChanged".

这可以使用PostSharp方面非常优雅地完成,PostSharp方面每次属性更改时都会自动触发PropertyChanged事件.如果我创建这样的方面并在我的实体类上使用它,我在尝试创建数据库时会得到以下例外:

 \tSystem.Data.Entity.Edm.EdmNavigationProperty: Name: The specified name is not allowed:          '<Name>k__BackingField'.
Run Code Online (Sandbox Code Playgroud)

显然,PostSharp会创建一个名为"k__BackingField"的属性,导致数据库创建失败,因为从EntityFramework的角度来看,它是一个无效的名称.有没有办法绕过这个错误没有在每一个实体级手动实现"INotifyPropertyChanged的"?

PS:英语不是我的母语,如果你告诉我发帖中可能出现的错误,我将非常感激.

先感谢您

c# entity-framework postsharp code-first

5
推荐指数
1
解决办法
627
查看次数

传递Func <>或类似于PostSharp方面

在我们公开WCF服务的外部边界中,我们将所有内部异常转换为FaultException.这是一个手动过程,通常每个实现都有一些独特的缺陷.对于每种暴露的方法,它都经过复制/粘贴和无意识修改(或忘记).为了减少错误,我想创建一个可以捕获任何未处理异常的方面.

我们将内部异常映射到故障异常.如何向方面发送映射功能?

如果我向这个方面添加一个属性,如下所示:

[Serializable]
public sealed class FaultExceptionConverter : OnExceptionAspect {
    public Func<Exception, FaultException> FaultConverter { get; set }
}
Run Code Online (Sandbox Code Playgroud)

我不能(正如属性限制所预期的那样)初始化它[FaultExceptionConverter(FaultConverter = MyConversionMethod)](在哪里MyConversionMethod可以分配给某些方法Func<Exception, FaultException>).是否有任何模式可以将此类参数传递给方面?许多类型可以传递到方面.这是个常见的问题吗?

如果碰巧有更好的方法来实现这一目标,我将不胜感激.

.net c# postsharp

5
推荐指数
1
解决办法
320
查看次数

我得到"无法序列化方面:在程序集'log4net ...'中输入'log4net.Core.LogImpl'" - 我可以将它设置为可序列化吗?

环境

  • Windows 7 x64
  • 安装PostSharp 2.1.7.30
  • PostSharp 2.1.7.29 (从PostSharp安装目录中检索的引用)
  • log4net 1.2.11.0 (从net\2.0\releaselog4net二进制文件下载目录中检索引用)
  • ASP.NET 2.0应用程序
  • Visual Studio 2010 SP1

方面

[Serializable]
public class MethodBoundaryAspect : PostSharp.Aspects.OnMethodBoundaryAspect
{
    ILog _logger = LogManager.GetLogger("MethodBoundaryAspect");

    public override void OnEntry(PostSharp.Aspects.MethodExecutionArgs args)
    {
        _logger.DebugFormat("The user {0} entered the method {1} at {2}.",
            HttpContext.Current.Profile.UserName,
            args.Method.Name,
            DateTime.Now);

        base.OnEntry(args);
    }

    public override void OnExit(PostSharp.Aspects.MethodExecutionArgs args)
    {
        _logger.DebugFormat("The user {0} exited the method {1} at {2}.",
            HttpContext.Current.Profile.UserName,
            args.Method.Name,
            DateTime.Now);

        base.OnExit(args);
    }

    public override void OnException(PostSharp.Aspects.MethodExecutionArgs args)
    {
        _logger.DebugFormat("The user …
Run Code Online (Sandbox Code Playgroud)

.net c# log4net postsharp

5
推荐指数
1
解决办法
2383
查看次数

AOP预编织时间编织?

我和AOP一起玩了多年,但并没有对这些解决方案百分百满意.具有运行时编织的AOP框架(如Spring.AOP)无法更改类的接口.随着后编译时间像Postsharp这样的框架(任何人都知道别人吗?)你可以.检查此示例,它将INotifyPropertyChanged实现添加到您的类.- > http://www.postsharp.net/model/inotifypropertychanged

这个AOP功能真的很棒,但你很快就会遇到麻烦...如果你想访问主机程序集中的新接口,你就无法编译,因为在编译后添加了接口.所以你得到一个"未定义PropertyChanged" - 错误.所以你必须通过将类分成另一个程序集来解决这个问题,这样你才能使用这些AOP优势.我记得,我使用T4模板运行相同的"后编译时间" - 根据程序集的反射信息生成源代码.好的,所以编译后的时间有时太晚了......

我正在寻找的是一个解决方案,通过visual studio用户定义的工具解析类的源代码,然后在部分类中的C#文件中生成代码.(所以所有AOP应用的类都必须是部分的)

所以它的"预编译时间AOP".这绝对是可能的,并且可以通过使用NRefactory作为Code Parser来完成.此外,Visual Studio比编译后修改更喜欢这个.

因此,该解决方案消除了编译后编织器的缺点.但并没有给你AOP的所有功能.但是与AOP-Framework一起,这应该是非常棒的.

有谁知道像这样的框架,还是讨论?!你怎么看 ?

亲切的问候,托马斯

c# compiler-construction aop postsharp

5
推荐指数
1
解决办法
1842
查看次数

Postsharp OnException Aspect不按预期工作

我有以下自定义方面,并尝试在项目和类级别应用它.在所有情况下,即使故意除以零,OnException也不会调用该方法.我究竟做错了什么?

[Serializable]
public class AutoLogExceptionsAspect : OnExceptionAspect
{
  public override void OnException(MethodExecutionArgs args)
  {
    AutoLogExceptionEventSource.Log.AutoLogException(args.Exception.GetType().Name, args.Exception.Message, args.Exception.StackTrace);
    args.FlowBehavior = FlowBehavior.Continue;
  }

  public override Type GetExceptionType(MethodBase targetMethod)
  {
    return typeof(Exception);
  }
}
Run Code Online (Sandbox Code Playgroud)

我在课上尝试过这种装饰:

[AutoLogExceptionsAspect]
public partial class App : Application
Run Code Online (Sandbox Code Playgroud)

这一个项目:

[assembly: AutoLogExceptionsAspect]
Run Code Online (Sandbox Code Playgroud)

.net c# postsharp

5
推荐指数
1
解决办法
1174
查看次数

对构建服务器上的PostSharp许可证问题进行故障排除:在哪里可以找到PostSharp Express的许可证?

我遇到了CI构建服务器的问题,其中PostSharp导致构建失败并显示以下消息:The assembly 'yada-yada.dll' uses non-licensed features (Basic Features). [...].我们正在使用当前版本的PostSharp(3.1.52),并且在开发人员拥有注册的Express许可证的本地开发环境中对库没有任何麻烦.

PostSharp文档,构建服务器不应该需要一个许可证.但是,他们承认自动化识别可能会失败:

如果此检查因任何原因无效,您可以使用构建服务器的任何许可用户的许可证密钥.这不会被视为许可侵权.但是,最好将问题报告给我们的技术支持,以便我们可以修复检测算法.

建议在源代码管理中包含许可证密钥.

我试图测试这个理论,但我似乎无法访问我的实际PostSharp Express许可证!PostSharp选项也没有任何帮助:

PostSharp许可选项http://i58.tinypic.com/2qi8bom.png

有人有主意吗?谢谢!

postsharp

5
推荐指数
1
解决办法
2614
查看次数

Postsharp和Fody兼容性

我在一个项目中广泛使用PostSharp的免费版本.我想使用PropertyChanged.Fody插件自动处理所有PropertyChanged通知.

(我知道PostSharp为此提供了一个库,但它不是免费的,因此我想使用Fody)

看来,当我在项目中同时使用PostSharp和Fody时,调试符号文件与源代码不同步.当我调试项目时,我无法再正确地执行代码.它看起来类似于将VS中的调试器附加到源代码与执行二进制文件的源代码不同的进程.

如果我禁用PostSharp或Fody,则调试立即再次工作.

是否可以在同一个项目中同时使用PostSharp和Fody?这需要特殊/额外配置吗?

postsharp fody fody-propertychanged

5
推荐指数
0
解决办法
744
查看次数