7

我刚开始使用 postsharp/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的存在。

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

4

1 回答 1

9

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

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

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

<PropertyGroup>
  <PostSharpProperties>IgnoredAssemblies=RevitAPI</PostSharpProperties>
</PropertyGroup>

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

<PropertyGroup>
  <PostSharpHost>Managed</PostSharpHost>
</PropertyGroup>
于 2010-06-02T07:40:46.303 回答