web-dev-qa-db-ja.com

ファイルまたはアセンブリ 'Microsoft.Practices.Unity'を読み込めませんでした

Unityをバージョン(2.1.505.2)にアップグレードしようとしていますが、アプリケーションを実行すると、次のFileLoadExceptionが表示されます。

ファイルまたはアセンブリ 'Microsoft.Practices.Unity、Version = 2.0.414.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'またはその依存関係の1つを読み込めませんでした。

Unity 2.0.414.0から2.1.505.2にアップグレードしています。

  • Unityを参照するソリューション内のすべてのプロジェクト参照は、正しいバージョンのDLLを参照します
  • Gacで参照されているUnity dllはありません。 (gacutil -l
  • アーカイブからすべてのUnity dllを削除しました。 powershellでダブルチェック

    PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { "{0}`t{1}" -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }
    

Unity 2.0.414.0をまだ何が/誰に言及しているのか、どうすればわかりますか?

FusionLogVwは、どのDLLが問題の原因であるかを教えてくれません。

どんな助けでも大歓迎です!

16
bas

問題は、古いバージョンのUnityを参照する別のMicrosoft dllでした。私はこれがすべての参照されたdllの名前空間をチェックしていることが偶然であることに気付き、 "unity"の名前空間を含む別のdllを見つけました。

更新中:

  • Microsoft.Practices.EnterpriseLibrary.Common
  • Microsoft.Practices.EnterpriseLibrary.Validation

最新のリリースされたバージョンに問題を解決しました。

私はこの問題で髪を抜いている失われた魂のために一日を節約したいと思います... :)

12
bas

バインディングリダイレクトは、適切なアセンブリバージョンを指す必要があります。

あなたの場合バージョン2.1.505.を使用する必要があります!

<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
  </dependentAssembly>
</assemblyBinding>

2.1.505.2次の理由により指定できません:

enter image description here

Unityアセンブリ2.1.505.2にはAssemblyFileVersionAssemblyVersionで指定された異なるバージョンがあります。

CLRはAssemblyVersionで動作し、AssemblyFileVersionは無視されますが、NuGetはAssemblyFileVersionで動作します!

だからこそ、この違いがあるのです!

AssemblyVersionを使用してください

2
Ievgen Naida

新しい質問はアセンブリへの既存の依存関係を見つけることに関するものなので、この質問を参照してください。

特定の依存関係の特定のバージョンに依存するものを見つける方法は?

Fuslogvw.exe を使用することを指します

0
LameCoder

承認済みのソリューションでEnterpriseLibrary更新を使用して修正することができませんでした。 app.configで依存するアセンブリバージョンを上書きするだけで終了しました。バージョンについて不平を言うライブラリを強制的に別のバージョンに使用するようなこともできます。

App.config:

  <dependentAssembly>
    <assemblyIdentity name="Unity.Container" publicKeyToken="489B6ACCFAF20EF0" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.8.11.0" newVersion="5.8.11.0"/>
  </dependentAssembly>
0
Jacob Brewer

App.config/web.configと、もちろんプロジェクトの参照を確認してください。

0
Marko

概要:これは私がコードのバグを修正しなければならなかった誰かのコードだったので、彼らは私にアプリケーションのZipファイルを提供しました。

私は何が起こっているのか、なぜいつも初めてコードが実行されていて、アプリケーションを再起動した後(変更をポストした後)例外をスローし始めたのか、まったくわかりませんでした。フォーラムでは多くの可能な解決策が提供されており、コードとデータベースを非難していて、実行した各ステップを元に戻し始めました。しかし、それは助けにはなりません

解決策:複数のトラブルシューティングでこれを修正することはできませんが、再起動すると、各nをビーンズから調査して、例外の原因となっている実際の理由を見つけます。私が見つけた

新しいビルドごとに、アプリケーションのbinフォルダーがdllを削除します

次に、解決策は、これらのDLLをアプリケーションのbinフォルダーに貼り付け、コードを再ビルドすることです(スクリーンショットを参照)

result:すべて消えました。

enter image description here

0
Rinku

リシャーパーがある場合は、問題のリファレンスを削除してビルドし、それが使用されているクラスに移動して(エラーが発生します)、リシャーパーに修正してもらいます。

面倒を省くが、誰もが再シャープ化しているわけではないことを感謝する:D

0
Netferret