1

私のc#アプリケーションは、2つの異なるパッケージ済みパーサーを使用しており、それぞれが異なる強力なバージョンのAntlr.Runtime.dllを使用しています。

アプリケーションはFileLoadExceptionをスローします。これは、バージョンの1つだけが正しくロードされ、他のバージョンが見つからなかったためと思われます。

<app> \ bin \ x86 \ Debugディレクトリには、dllのコピーが1つだけ含まれています。

コードがバージョン管理されたアセンブリを直接呼び出さないため、アセンブリエイリアスを使用できないことに注意してください。これらは、パーサーアセンブリを介して間接的にのみ呼び出されます。

これは、同じ名前の異なるバージョンのdllを別々のディレクトリに配置するようにVisual Studioに指示することですか?GACの使用はできるだけ避けたいと思います。

私は多くの「並べて」および関連する記事を読みましたが、この質問に対処しているものはないようです。

4

2 に答える 2

1

私は決してSxSの専門家ではありませんが、私の会社では、これが発生すると、アセンブリごとに異なるフォルダーと、それらをロードするためのマニフェストが作成されます。

于 2011-02-01T12:04:33.817 に答える
0

AppDomain.AssemblyResolveをフックすることで、この問題を解決しました。

AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
{
    Assembly result = null;

    if (e.Name ==
        @"Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7")
        result = Assembly.LoadFile(
             @"C:\src\NHibernate-3.0.0.GA\lib\net\3.5\Antlr3.Runtime.dll");

    return result;
};   
于 2011-02-01T12:20:43.990 に答える