标签: postsharp

需要免费模拟PostSharp

我听说过PostSharp,但我想知道是否还有其他类似的工具 - 类似于PostSharp的东西?

是否有任何库可以用作PostSharp的替代品?任何其他可以后处理程序集并根据属性注入代码的工具?

PostSharp的任何免费和/或开源替代品都会特别有趣.

谢谢.

.net c# aop attributes postsharp

3
推荐指数
1
解决办法
2557
查看次数

PostSharp与DynamicProxy2接口拦截

我过去曾使用PostSharp来做AOP,而且我一直在使用Autofac和DynamicProxy2检查AOP,我很好奇是否有其中任何一个的好处.

即一个比另一个更可靠,可测试,稳定,高效等等?

谢谢.

.net aop postsharp

3
推荐指数
1
解决办法
383
查看次数

如何使用PostSharp实现延迟加载?

我想用PostSharp在属性上实现延迟加载.

简而言之,而不是写作

SomeType _field = null;
private SomeType Field
{
    get
    {
        if (_field == null)
        {
            _field = LongOperation();
        }
        return _field;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想写

[LazyLoadAspect]
private object Field
{
    get
    {
        return LongOperation();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我确定我需要在类中发出一些代码来生成支持字段,以及在getter方法中为了实现测试.

使用PostSharp,我正在考虑覆盖CompileTimeInitialize,但我错过了处理已编译代码的知识.

编辑: 问题可以扩展到任何无参数的方法,如:

SomeType _lazyLoadedField = null;
SomeType LazyLoadableMethod ()
{
    if(_lazyLoadedField ==null)
    {
        // Long operations code...
        _lazyLoadedField = someType;
    }
    return _lazyLoadedField ;
}
Run Code Online (Sandbox Code Playgroud)

会成为

[LazyLoad]
SomeType LazyLoadableMethod ()
{
     // Long operations code...
     return someType;
}
Run Code Online (Sandbox Code Playgroud)

c# aop lazy-loading postsharp

3
推荐指数
1
解决办法
851
查看次数

如何编写PostSharp Invoke方面以简化跨线程控制更新

当我想跨线程更新控件时,我通常最终会这样做:

this.Invoke((MethodInvoker)delegate { SomeProcedure(); });
Run Code Online (Sandbox Code Playgroud)

建议的方法实际上是调用调用者来获取你想要更新的特定控件,但99%的时候表单(即我的例子中的'this')和控件都将在同一个控件上创建线程所以我真的很喜欢这样做,为了简单起见.

我在想,如果我只是将PostSharp方面置于SomeProcedure之上,将它包含在我的那个混乱的声明中,那将是很好的.

然后去......(哦是啊,第一个可用的答案100奖金:)

c# multithreading postsharp winforms

3
推荐指数
1
解决办法
758
查看次数

为什么PostSharp会在构建服务器上跳过我的一个项目?

我最近通过NuGet升级了PostSharp并且它已停止工作,但仅限于非常精选的情况.它在我的构建服务器(TeamCity)上不起作用,并且它不仅适用于我的一个项目.其他项目都正确转换.

我可以改变什么才能在我的一个项目中失去PostSharp转换?

.net teamcity postsharp

3
推荐指数
1
解决办法
855
查看次数

将PostSharp方面应用于类中的所有方法以记录方法名称

我想创建一个我想要应用于类的属性.在这个类中,如果调用了一个方法,在postharp 的OnEntryand OnExitmethodof中,我想记录确切的方法名,如下所示:

"GetPartners开始......"

要么

"GetPartners完成......"

或者如果发生异常:

"在GetPartners方法中出现异常"

这有什么解决方案吗?

c# aop postsharp

3
推荐指数
1
解决办法
4042
查看次数

为什么postharp导致Web项目在发布时失败?

在postharp发布的4.2.27版本中,Web项目工作正常.

当postharp nuget包升级到> 4.2.28时,发布失败.尝试在Microsoft.Web.Publishing.targets中运行TransformWebConfigCore时失败.错误

Microsoft.Web.Publishing.targets(1483,5):错误:无法打开源文件:找不到文件'[Project Location]\Web.config; web.config'.

c# postsharp

3
推荐指数
1
解决办法
861
查看次数

如何使用自定义属性为C#Auto-Property提供默认值?

如何使用自定义属性为C#Auto-Property提供默认值?

这是我想看到的代码:

class Person 
{
    [MyDefault("William")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我知道没有内置方法来使用属性初始化默认值 - 我可以编写自己的自定义类来使用我的自定义属性来初始化默认值吗?

c# postsharp .net-4.0 visual-studio-2010

2
推荐指数
1
解决办法
1625
查看次数

如何使用PostSharp停止方法的执行?

目前,我正在尝试开发一种解决方案,该方法将检查方法是否已执行以及自上次执行以来是否经过了一段时间(鉴于该方法已经过去并且时间已过去),我想从OnEntry方法跳转到OnExit,而无需实际从方法本身执行任何代码。

有点 :

public class CacheThisMethod : OnMethodBoundaryAspect
{
            public override void OnEntry(MethodExecutionArgs args)
            {
               if (isCached( args.Method.name)
                   {
                    args.MethodExecutionTag =  getReturnValue(args.Method.name)
                    //jump to OnExit
                   }
               else
                   {
                    //continue
                   }
            }
            public override void OnExit(MethodExecutionArgs args)
            {
               args.Method.ReturnValue = args.MethodExecutionTag;


             }
}
Run Code Online (Sandbox Code Playgroud)

我该如何实现?谢谢。

c# aop postsharp

2
推荐指数
1
解决办法
562
查看次数

发布版本中的PostSharp中的AssemblyLoadException

我有几个项目都包含json.net 6.0.3 NuGet包.当我添加:

using Newtonsoft.Json;
Run Code Online (Sandbox Code Playgroud)

构建时出现以下错误:

1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:未处理的异常(3.1.48.0,32位,CLR 4.5,发布):PostSharp.Sdk.CodeModel.AssemblyLoadException:找不到程序集'newtonsoft.json,version = 4.5. 0.0,culture = neutral,publickeytoken = 30ad4fe6b2a6aeed'.[版本不匹配] 1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:============ PostSharp程序集加载日志================ === 1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:使用绑定标识'newtonsoft.json,version = 4.5.0.0,culture = neutral,publickeytoken = 30ad4fe6b2a6aeed'查找程序集.1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:找到文件'F:\ packages\Newtonsoft.Json.6.0.3\lib \net45\Newtonsoft.Json.dll',标识为'newtonsoft.json,版本= 6.0.0.0,culture = neutral,publickeytoken = 30ad4fe6b2a6aeed,processorarchitecture = msil'.1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:参考不匹配'F:\ packages\Newtonsoft.Json.6.0.3\lib \net45\Newtonsoft.Json.dll'[VersionMismatch].1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:探测位置'C:\ ProgramData\PostSharp\3.1.48\bin.Release\Newtonsoft.Json.exe'因为此目录已明确添加到搜索路径[文件未找到].1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:探测位置'C:\ ProgramData\PostSharp\3.1.48\bin.Release\Newtonsoft.Json.dll'因为此目录已明确添加到搜索路径[文件未找到].1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:探测位置'C:\ ProgramData\PostSharp\3.1.48\bin.Release\Newtonsoft.Json.winmd'因为此目录已明确添加到搜索路径[文件未找到].1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:探测位置'F:\ bin\release\TwinkyTalk\Newtonsoft.Json.exe'因为此目录已明确添加到搜索路径[File Not Found].1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:找到文件'F:\ bin\release\TwinkyTalk\Newtonsoft.Json.dll',标识为'newtonsoft.json,version = 6.0.0.0,culture = neutral ,publickeytoken = 30ad4fe6b2a6aeed,processorarchitecture = msil'.1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:参考不匹配'F:\ bin\release\TwinkyTalk\Newtonsoft.Json.dll'[VersionMismatch].1> F:\ TwinkyTalk\TwinkyTalk.csproj:错误PS0099:日志:探测位置'F:\ bin\release\TwinkyTalk\Newtonsoft.Json.winmd'因为此目录已明确添加到搜索路径[File Not Found].1> …

postsharp json.net

2
推荐指数
1
解决办法
1926
查看次数