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' またはその依存関係の 1 つをロードしないでください。操作はサポートされていません。(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 に答える