我刚刚开始使用postharp/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.
有没有人遇到过这个问题,或者有人能指出我在哪里获得更多信息的正确方向?
这是C++依赖项的已知问题.
原因是RevitAPI.dll不是纯MSIL,因此无法由本机(更快)主机加载.
解决方法是将此程序集标记为"已忽略".你可以通过编辑csproj并添加:
<PropertyGroup>
<PostSharpProperties>IgnoredAssemblies=RevitAPI</PostSharpProperties>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
如果这不起作用(因为PostSharp无法忽略程序集),则必须强制PostSharp使用托管(较慢)主机:
<PropertyGroup>
<PostSharpHost>Managed</PostSharpHost>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)