6

私の Web アプリケーションではNHibernate.dllを使用しています。これは、次のアセンブリに依存します。

「Antlr3.Runtime、バージョン = 3.1.0.39271、文化 = ニュートラル、PublicKeyToken = 3a9cab8f8d22bfb7」

同じプロジェクトで、別の要件のためにAntlr3.StringTemplate.dllを導入する必要があります。上記のアセンブリの別のバージョンに依存しています。

NHibernateを満たすAntlr3.Runtime.dllのバージョンを使用すると、Antlr3.StringTemplateが不平を言い始め、逆もまた同様です。

このような状況を解決するにはどうすればよいですか?

4

4 に答える 4

5

web.configでassemblyBindingを使用して、最新バージョンを古いバージョンにリダイレクトできます。

例:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4"/>
            <bindingRedirect oldVersion="2.1.0.4000" newVersion="2.1.2.4000"/>
        </dependentAssembly>            
    </assemblyBinding>
</runtime>

これは<configuration>、web.configのノードのすぐ下にあります。

ここでそれについて読むことができます:http: //msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

于 2010-06-16T07:54:24.130 に答える
4

最も簡単な方法は、同じバージョンに対して両方を再コンパイルすることです。または、参照からバージョン指定を削除する (および特定のバージョンを false に設定する) こともできます。

于 2010-06-15T16:44:31.020 に答える
1

私は同じ問題を抱えていました。

bindingredirect はうまくいきましたか?

私はこのように試しましたが、何も変わりませんでした:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="3a9cab8f8d22bfb7" culture="neutral" />
            <bindingRedirect oldVersion="*" newVersion="3.1.3.6002" />
            <publisherPolicy apply="no"/>
        </dependentAssembly>
    </assemblyBinding>

同じエラーが表示されました。

そこで、古いバージョンの Antlr3.Runtime アセンブリを gac に追加するという解決策を採用することにしました。今では完全に機能します。

于 2010-08-09T21:45:21.510 に答える
1

ジム・ラムが提案することをしなければなりませんでした。私たちはすべての「サード パーティ ライブラリ」のローカル バージョンを作成し (吹き替えたように)、厳密な名前と明示的な依存関係をターゲットにしました (別のライブラリに依存する dll をダウンロードしたときに得られるものとは異なります)。これらのローカル ビルドをリポジトリ (Subversion) にコミットしました。次に、結果のアセンブリを、それらのアセンブリに依存する各プロジェクトのルートの下にある "Dependencies/lib" フォルダーに配置しました。これにより、相対パスの場所機能を使用して、それらを VS 参照として追加することができました。

于 2010-06-15T21:31:17.370 に答える