在postsharp中的AssemblyLoadException,来自引用的DLL的参数的问题?

时间:2010-06-02 03:08:22

标签: c# aop postsharp

我刚开始使用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。

之前有没有人遇到过这个问题,或者有人能指出我在哪里获得更多信息的正确方向?

1 个答案:

答案 0 :(得分:9)

这是C ++依赖项的已知问题。

原因是RevitAPI.dll不是纯MSIL,因此本机(更快)主机无法加载它。

解决方法是将此程序集标记为“已忽略”。您可以通过编辑csproj并添加:

来实现
<PropertyGroup>
  <PostSharpProperties>IgnoredAssemblies=RevitAPI</PostSharpProperties>
</PropertyGroup>

如果这不起作用(因为PostSharp无法忽略程序集),则必须强制PostSharp使用托管(较慢)主机:

<PropertyGroup>
  <PostSharpHost>Managed</PostSharpHost>
</PropertyGroup>