我听说过PostSharp,但我想知道是否还有其他类似的工具 - 类似于PostSharp的东西?
是否有任何库可以用作PostSharp的替代品?任何其他可以后处理程序集并根据属性注入代码的工具?
PostSharp的任何免费和/或开源替代品都会特别有趣.
谢谢.
我过去曾使用PostSharp来做AOP,而且我一直在使用Autofac和DynamicProxy2检查AOP,我很好奇是否有其中任何一个的好处.
即一个比另一个更可靠,可测试,稳定,高效等等?
谢谢.
我想用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) 当我想跨线程更新控件时,我通常最终会这样做:
this.Invoke((MethodInvoker)delegate { SomeProcedure(); });
Run Code Online (Sandbox Code Playgroud)
建议的方法实际上是调用调用者来获取你想要更新的特定控件,但99%的时候表单(即我的例子中的'this')和控件都将在同一个控件上创建线程所以我真的很喜欢这样做,为了简单起见.
我在想,如果我只是将PostSharp方面置于SomeProcedure之上,将它包含在我的那个混乱的声明中,那将是很好的.
然后去......(哦是啊,第一个可用的答案100奖金:)
我最近通过NuGet升级了PostSharp并且它已停止工作,但仅限于非常精选的情况.它在我的构建服务器(TeamCity)上不起作用,并且它不仅适用于我的一个项目.其他项目都正确转换.
我可以改变什么才能在我的一个项目中失去PostSharp转换?
我想创建一个我想要应用于类的属性.在这个类中,如果调用了一个方法,在postharp 的OnEntryand OnExitmethodof中,我想记录确切的方法名,如下所示:
"GetPartners开始......"
要么
"GetPartners完成......"
或者如果发生异常:
"在GetPartners方法中出现异常"
这有什么解决方案吗?
在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#Auto-Property提供默认值?
这是我想看到的代码:
class Person
{
[MyDefault("William")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我知道没有内置方法来使用属性初始化默认值 - 我可以编写自己的自定义类来使用我的自定义属性来初始化默认值吗?
目前,我正在尝试开发一种解决方案,该方法将检查方法是否已执行以及自上次执行以来是否经过了一段时间(鉴于该方法已经过去并且时间已过去),我想从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)
我该如何实现?谢谢。
我有几个项目都包含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 ×10
c# ×7
aop ×5
.net ×3
.net-4.0 ×1
attributes ×1
json.net ×1
lazy-loading ×1
teamcity ×1
winforms ×1