ファイルまたはアセンブリまたはその依存関係の1つをロードできませんでした


238

「ファイルまたはアセンブリまたはその依存関係の1つを読み込めませんでした」という別の問題があります。

追加情報:ファイルまたはアセンブリ 'Microsoft.Practices.Unity、Version = 1.2.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)

これを引き起こしている原因や、原因を特定するためにデバッグする方法はわかりません。

私はソリューションカタログの.csprojファイル、およびUnityのある場所すべてで検索を実行しました。

リファレンスInclude = "Microsoft.Practices.Unity、Version = 2.0.414.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35、processorArchitecture = MSIL"

私のプロジェクトで1.2.0.0に反する参照をどこにも見つけることができません。

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

このような問題を一般的にデバッグする方法のヒントも教えてください。


1
参照されているアセンブリのいずれかが古いUnityライブラリにあるものを使用していますか?
デサイクロン

3
おそらく...しかし、どのようにしてどのアセンブリを見つけることができますか?私のソリューションには多くのプロジェクトと多くの潜在的な容疑者がいます...試行錯誤の
総当たり

3
これはアセンブリ参照ではなく、バージョン2.0を参照します。しかし、実行時にCLRは古いバージョンの1.2を見つけています。ビルドディレクトリにその古いDLLが見つからない場合は、Fuslogvw.exeを使用して、CLRがこの古いコピーをどのように見つけたかを確認します。
Hans Passant

2
プロジェクトのbinフォルダーを見て、プロジェクトのdllの名前に矛盾がないかどうかを確認します。それを削除してから、ソリューションを再構築してください。それでうまくいきました。
coggicc 2015

11
「またはその依存関係の1つ」は、本当に私を困らせる部分です。「依存関係の1つ」をロードできない場合、エラーは「依存関係の1つ」をロードできないことを示すはずです。現在のフォームは役に立たず、シンギーをロードできないとも言えます
ポールマッカーシー

回答:


116
  1. 古いバージョンのUnityを参照しているアセンブリを参照しているかどうかを確認します。たとえばServiceLocator.dll、古いバージョンのUnityアセンブリを必要とすると呼ばれるアセンブリがあるとします。参照ServiceLocatorするときに、古いバージョンのUnityを提供する必要があり、それが問題を引き起こしています。

  2. すべてのプロジェクトがアセンブリをビルドする出力フォルダーである場合があり、古いバージョンのUnityがあります。

FusLogVwを使用して、古いアセンブリをロードしているユーザーを見つけ、ログのパスを定義してソリューションを実行し、Unityアセンブリがロードされている最初の行を(FusLogvwで)チェックし、ダブルクリックして呼び出しを確認できますアセンブリ、そしてここに行きます。


6
FuseLogVwのログファイルはどこにありますか
Stiger

1
ログファイルを見つける必要がないようにするには、カスタムログパスを指定します。設定、[カスタムログパスを有効にする]チェックボックスをオンにし、カスタムログパスを入力して更新します。
RedGreenCode 2015年

82

IISマネージャーを開く

アプリケーションプールを選択

次に、使用しているプールを選択します

詳細設定に移動します(右側)

32ビットアプリケーションを有効にするフラグをfalseからtrueに変更します。


IIS->各ApplicationPoolを選択->基本設定-> [.NET Frameworkバージョン]ドロップダウンで最新のフレームワークが選択されているかどうかを確認
Martin

VSでプロジェクトを右クリックすることもできます。32ビットの優先チェックマークを削除します
eran otzap

ありがとう。出来た。まあそれは私の場合はすでに真実でした、試してみてください。私はそれを偽にして、それはうまくいった。
meekash55 2017年

あるサーバーから別のサーバーにプロジェクトをマージしたとき、解決策に感謝して、このフラグは確かに再びFalseでした!
Appsum Solutions

69

私にとって、他のソリューションはどれも機能しませんでした(クリーンアップ/再構築戦略を含む)。Visual Studio閉じて再度開くという別の回避策が見つかりました。

これにより、Visual Studioがソリューションとすべてのプロジェクトを再ロードし、プロセスの依存関係を再確認するようになると思います。


33
これがうまくいくと思わない場合は、少なくとも試してください。自分が信じるまで自分では信じられなかった。
Ben Cull、2015年

3
me
役に立っ

48

ソリューションのデバッグフォルダーとリリースフォルダーをクリーンアップしてください。次に、結束を削除して再度追加します。


3
この問題は多くの原因で発生する可能性があります...あなたの解決策は私の問題を解決し、他の問題も解決する可能性があります。
Scott Rippey、2011

1
@ScottRippeyこれは私にとってはうまくいった。最初にすべての.pdbファイルを削除してから、プロジェクトをリロードして再ビルドしました。
botenvouwer 2014

21

99%で、ファイルまたはアセンブリをロードできなかったか、その依存関係の問題の1つが依存関係によって引き起こされています!次の手順に従うことをお勧めします。

  1. Dependency Walkerhttp://www.dependencywalker.com/からダウンロードします

  2. Dependency Walkerを起動してdllを開きます(私の場合NativeInterfaces.dll)。

  3. あなたは赤のエラーで1つ以上のDLLを見ることができますファイルを開くエラー...

  4. これは、このdllがシステムにないことを意味します。私の場合、dll名はMSVCR71.DLL

  5. あなたはGoogleから不足しているdllをダウンロードして正しいパスにコピーすることができます(私の場合c:\windows\system32

  6. この時点で、新しいdllをGAC(グローバルアセンブリキャッシュ)に登録する必要があります。DOS端末を開いて、次のように記述します。

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
  7. アプリケーションを再起動してください!


22
Dependency Walkerは素晴らしいですが、インターネットからWindowsにランダムDLLをコピーすることはそれほど効率的ではありません。それらのdllを提供するインストーラーを探すことをお勧めします。
RJFalconer 2016年

いくつかのファイル(API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL)が見つかりませんでしたが、このstackoverflowの質問に私を導きました。基本的には、一部のファイルの誤検知を確認できることに留意してください。リンクで詳細を確認できます。
cheriejw 2018年

16

Microsoft Enterprise Library(.NetTiersによって参照される)が問題であり、古いバージョンのUnityを参照していました。この問題を解決するために、web.configで次のバインディングリダイレクトを使用しました。

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

または、エンタープライズライブラリを最新バージョンに更新することもできます。


16

以下は私のために働いた。

  • 一時ファイルを削除C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files
  • VSTSを閉じて再度開く
  • 同じDLLを削除して追加します(注:同じ一致するバージョンを追加します)

15

プロジェクトのWeb.config / App.configファイルを確認します。バージョン番号が正しいかどうかを確認します。

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

これでうまくいきました。



15

5年前に投稿された元の質問にもかかわらず、問題はまだ解決せず、かなり迷惑です。

一般的な解決策は、参照されているすべてのアセンブリを徹底的に分析して、問題の原因を理解することです。このタスクを簡単にするために、.NETアセンブリ(.dllまたは.exeファイル)を選択して、参照されているすべてのアセンブリのグラフを取得し、競合する参照や欠落している参照を強調表示できるツール(Visual Studio拡張)を作成しました。

このツールは、Visual Studioギャラリーで利用できます。https//marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

出力例: ここに画像の説明を入力してください


Visual Studioのコミュニティ版では動作しません
Draex_

Visual Studioのエディションとは別の問題があるはずです。VS 2017およびVS 2015コミュニティエディションで拡張機能をテストしました。実際には、それはVS 2017 Communityエディションによって開発されました。
marss19 '

あは。他に拡張機能がインストールされていますか?このページでは、VSMLコミュニティではDGMLはサポートされていません:msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
Draex_

1
Communityエディションにはアーキテクチャツールはありませんが、DGMLエディター自体は利用できます。「個別コンポーネント」の「DGMLエディターのインストール」を選択してインストールできます-> Visual Studioインストーラーの「コードツール」->変更
marss19

11

スクリーンショットソリューションエクスプローラーで(ソリューションではなく)プロジェクトを右クリックし、[ビルド]タブで[プラットフォームターゲット]を選択します: "Any CPU"。


アプリケーションプールを確認した後、「32ビットアプリケーションを有効にする」がFalseに設定されましたが、プラットフォームターゲットはx86でした。Any CPUまたはx64に変更すると、問題が解決しました。
Keith Ketterer、

11

Juntosの答えは正しいですが、次の点も考慮する必要があります。

Unity v2.1.505.2の場合、異なるAssemblyVersionおよびAssemblyFileVersion属性が指定されます。

ここに画像の説明を入力してください

AssemblyFileVersionはNuGetによって使用されますが、CLRはそれを気にしません!CLRはAssemblyVersionのみを使用します。

したがって、リダイレクトは、AssemblyVersion属性で指定されたバージョンに適用する必要があります。したがって、2.1.505.0を使用する必要があります

<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>

参照: AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?


6

私もこのひどいエラーを受け取り、これの解決策を見つけました...

  1. ソリューション名を右クリック
  2. Clean Solutionをクリックします
  3. Visual Studioを再起動します。
  4. Gotoプロジェクトのプロパティ>>ビルド
  5. 構成リリースに変更
  6. デバッグを開始(F5)

1)、2)

ソリューション名を右クリック

4)、5)

構成をリリースに変更

これがあなたにも役立つことを願っています。


5
  • 後藤:ソリューション -> パッケージ
  • [ 詳細]タブをクリックします(ページの下にあります)
  • 追加のアセンブリにDLLを追加します(この方法で、SharePointに外部DLLを追加できます)。

7
私のVS2010プロジェクトに「ソリューション->パッケージ」がありません
Muflix

5

これが役立つかどうかはわかりません。

アセンブリ内のプロパティのアセンブリ名とデフォルトの名前空間が一致することを確認します。これにより、同じエラーが発生した私の問題が解決しました。


優れた!私のdllファイル名と名前空間が異なっていたので、名前空間をコピーして自分のdllの名前を変更しました。
匿名のカーン

5

私の場合、binフォルダーにはUnity.MVC3と呼ばれる非参照DLLがありましたが、Visual Studioでこれへの参照を検索しようとしましたが成功しなかったため、binフォルダーからそのdllを削除するだけの簡単な解決策でした。


4

ありがとうRiddhi M.以下は私のために働いた。

一時ファイルの削除C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files VSTSを閉じて再度開く同じDLLを削除して追加します(注:一致する同じバージョンを追加します)


これに長い間費やしましたが、これが答えだったとは思えません。これは通常、VS内で奇妙な動作が見られる場合に最適なソリューションです。ありがとうございました。
Bonez024 2018年

3

あなたはあなたのソリューションにたくさんのプロジェクトがあると言います...まあ、ビルドオーダーの一番上の近くから始めます。その1つを入手してビルドし、それがわかったら、残りの部分に同じ修正を適用できます。

正直なところ、おそらく参照を更新する必要があるだけです。バージョンを更新し、参照を更新しなかったか、ソリューションをソース管理に保持している場合は相対パスの問題のようです。仮定を確認し、参照を再度追加してください。


3

以下は私のために働いた。

  • 一時ファイルを削除C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files
    • 次に、Temporary Asp.net Files> properties> securityを右クリックして、IISおよびプロジェクトを実行しているすべてのユーザーに完全な制御アクセス権を与えます


3

同じ問題がありましたが、以下の手順で解決しました:

  1. ツールメニューを開き、オプションを選択
  2. オプションで、ウィンドウはプロジェクトとソリューション/ Webプロジェクトに移動します
  3. 小切手 use the 64bit version of IIS ...

ここに画像の説明を入力してください


2

あなたのappname.dllファイルを出力フォルダーから削除する必要があります。DebugフォルダーとReleaseフォルダーをクリーンアップします。再構築して、出力フォルダーに再生成されたdllファイルにコピーします。


2

I 「スタートアッププロジェクトとして設定」をアンロード/ unfoundライブラリ/プロジェクト。

次にそれを展開しました。

出来た!

最初はアセンブリになかったため、.dllを見つけることができなかったと思います。


2

別の考えられる原因:プロジェクトプロパティで誤って両方のプロジェクトに同じアセンブリ名を付けていないことを確認してください。


これは理解するのに何時間もかかりました...ユニットテストプロジェクトに誤ってメインプロジェクトと同じ名前を付けたので、ユニットテストプロジェクトdllがプロジェクトdllを上書きしている
はずです

2

Enterprise Library 5を使用した.NET 4.0の私のソリューションは、以下への参照を追加することでした。

Microsoft.Practices.Unity.Interception.dll


2

競合する参照に注意してください。クリーンで再構築した後でも、参照の競合は問題を引き起こします。私の問題はAForgeとAccordの間でした。両方の参照を削除し、特定の参照を再選択する参照を再度追加しました(特に私の場合、Accordのみ)。



2

私の場合、提案された答えはどれもうまくいきませんでした。

これが私のために働いたものです:

  1. 参照を削除します
  2. DLLの名前を変更する
  3. 参照を再度インポートします

2番目のステップは、それなしでは機能しなかったため、明らかに重要でした。


2

参照の「ローカルにコピー」プロパティがtrueに設定されていて、特定のバージョンがtrueに設定されているかどうかを確認してください。これは、Visual Studioのアプリケーションに関連しています。


2

今日これがあり、私の場合、問題は非常に奇妙でした:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

XMLの最後にある迷子の文字に注意してください-どういうわけか、バージョン番号からこのXMLブロックの最後に移動されています!

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

上記と出来上がりに変更!すべてが再び機能しました。


1

Windows XPでアプリケーションを開いてこのエラーメッセージが表示された場合は、ネットフレームワーク4とサービスパック3がないと機能しないため、最初にそのアプリケーションをインストールしたことになります。両方をインストールしたが、このエラーが発生するため、そのアプリを再インストールする必要がありますが、最初に追加と削除からアンインストールします

これが機能しない場合は、私を虐待しないでください。私もジュニアです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.