2010-06-02 59 views
7

我剛剛開始使用postsharp/AOP。我想爲C#編寫一些工具來跟蹤一些我爲一些軟件編寫的插件的使用情況。Postsharp中的AssemblyLoadException,參考DLL的參數問題?

我想在調用方法時使用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的存在。

有沒有人遇到過這個問題之前,或者任何人都可以指出我在哪裏獲得更多信息的正確方向?

回答

9

這是C++依賴關係的已知問題。

原因是RevitAPI.dll不是純粹的MSIL,所以它不能被本機(更快)的主機加載。

解決方法是將此程序集標記爲「忽略」。您可以通過編輯的csproj並加入做到這一點:

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

如果這不起作用(因爲沒有辦法PostSharp忽略裝配),你必須強制PostSharp使用管理(慢)主機:

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