0

構造マップを使用して、子ディレクトリからプラグインをロードしています。

メイン アプリとプラグインの両方が FileHelpers dll を参照します。FileHelpers には、レコードを区切るものを定義するためにクラスに配置する属性があります。これらは私のプラグインで定義されています。例えば。

[Delimited('\t')] 
public class Test {
    public string name;
}

FileHelpers ユーティリティは、プラグインによって提供されるクラス定義を使用して、メイン アプリから実行されます。プラグイン dll をメイン アプリケーションの下のディレクトリに配置すると、FileHelpers ライブラリで属性が見つからないという問題が発生しますが、メイン ライブラリ (同じフォルダ) の隣に配置すると、問題なく動作します。

コードにさらにいくつかのデバッグ ステートメントを配置したところ、

var type = typeof(Test);
var attributes = type.GetCustomAttributes(true); 

特定のものではなく使用されます(FileHelpersが使用しているもの)

var attributes = type.GetCustomAttributes(typeof(DelimitedAttribute), true);

次に、問題なくカスタム属性を見つけます。

これはSMの問題かもしれないと思いましたが、MEFを試してみて、 Assembly.Load() を使用して実行すると、同じことが起こります。

4

1 に答える 1

0

ここで説明されている問題が発生していると思います。

回答にリンクされているブログ投稿によると、プラグインdllには強力な名前を付け、完全に信頼する必要があるようです。そうしないと、GetCustomAttributesが除外されますDelimitedAttribute。 プラグインアセンブリにAllowPartiallyTrustedCallers属性を追加してみてください。

于 2012-01-11T09:26:41.527 に答える