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