10

私のプロジェクトはLibrary1.dllLibrary2.dllを参照しています。 Library2.dllはLibrary1.dllに依存していますが、別の名前Library1.Net40.dllで参照するようにコンパイルされています。

Library1.Net40.dllのすべての参照をリダイレクトしてLibrary1.dllに解決するようにアプリケーションに指示する良い方法はありますか? <bindingRedirect> を使用してバージョンをリダイレクトする方法に似たものでしょうか?

AppDomain.AssemblyResolveイベントを処理するソリューションがありますが、これはちょっとしたハックであり、これを行うためのより良い方法があることを望んでいます。

編集:誰かの参考のために、AppDomain.AssemblyResolveイベントを使用して別のアセンブリにリダイレクトすることで解決した方法を次に示します。

4

2 に答える 2

5

<codeBase> 要素で遊んでみましたか?

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="Library1.Net40"
                              publicKeyToken="..."
                              culture="neutral" />
            <codeBase version="2.0.0.0"
                      href="Library1.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

(未テスト; 動作するかどうかはわかりません。)

CF: コメントには少し長いので、この更新をここに置きます :)

良いアイデアです、ありがとう。リダイレクトは機能しましたが、名前が異なるため不平を言います。ログは次のとおりです。

ログ: 新しい URL ファイルのダウンロードを試みています:///C:/Project/bin/Library1.dll。
ログ: アセンブリのダウンロードは成功しました。ファイルのセットアップを試みています: C:\Project\bin\Library1.dll
LOG: ダウンロード キャッシュのセットアップ フェーズに入ります。
ログ: アセンブリ名: Library1、Version=3.5.0.0、Culture=neutral、PublicKeyToken=30ad4fe6b2a6aeed
WRN: アセンブリ名を比較すると、不一致が発生しました: NAME
ERR: アセンブリ参照が見つかったアセンブリ定義と一致しませんでした。
ERR: hr = 0x80131040 でセットアップに失敗しました。
ERR: アセンブリのセットアップを完了できませんでした (hr = 0x80131040)。プローブが終了しました。
于 2010-11-24T01:25:57.987 に答える