2016-12-21 4 views
1

したがって、COM経由でインタフェースされるC#ライブラリを作成しています。このライブラリはログの目的でlog4netを使用します。今、このCOMライブラリは、インストールされているバージョンのlog4netの異なるバージョンをロードする必要があります。そのため、インストールされているディレクトリにlog4netのバージョンがあればロードするようにしています。今私はBindingRedirectsの使い方に慣れていますが、以前はライブラリで使ったことがないので、どうやってどうやって知ることができません。 StackOverflowで '関連する'質問を探す私は、アセンブリの読み込みを制御するためのソリューションを見つけました。ここに私が試したことの例があります。COMライブラリで使用できるライブラリのバージョンをロードする

Assembly assembly = null; 

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => 
{ 
    string name = new AssemblyName(args.Name).Name; 

    if (name.Equals("log4net")) 
    { 
     return assembly; 
    } 
    return null; 
}; 

assembly = Assembly.LoadFrom("log4net.dll"); 

特定のバージョンが参照されないようにcsprojを編集しました。

ファイルまたはアセンブリ「log4netの、バージョンをロードできませんでした= 1.2.10.0:

<Reference Include="log4net"> 
    <HintPath>..\packages\log4net.1.2.10\lib\2.0\log4net.dll</HintPath> 
    <SpecificVersion>False</SpecificVersion> 
</Reference> 

しかし、私は、私はこの例外を取得します(私は上記のコードのいくつかのバリエーションを試してみた)何をするかは問題ではありませ、 文化=ニュートラル、PublicKeyToken = 1b44e1d426115821 'またはその の依存関係の1つ。見つかったアセンブリのマニフェスト定義では、 がアセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)

私がここで達成しようとしていることは可能だと感じていますが、私はそれを間違った方法で行っています。私はまた、BindingRedirectsをそのように適用することができれば、ライブラリに特化したapp.configファイルを使用する方法を解決します。良いか悪いかにかかわらず、誰かがこれに関して持っているアドバイスに感謝します。

答えて

0

誰かが同じ問題を抱えている場合は、私のために働く回避策があります。だから、Fody weaver Costura https://github.com/Fody/CosturaをCOM dllのlog4netに埋め込むことにしました。私のFodyWeavers.xmlでは、log4netをマージされたアセンブリとしてのみ使用するために以下の設定を使用しました。

<Costura> 
    <IncludeAssemblies> 
     log4net 
    </IncludeAssemblies> 
</Costura> 

私はまだ実際にそれが動的にアセンブリ(log4netの)のいずれかのバージョンをロードすることが可能ですが、今以上のソリューションは私のニーズを満たしているためかどうかを確認したいと思います。

関連する問題