web-dev-qa-db-ja.com

ファイルまたはアセンブリ「Microsoft.Data.Edm」をロードできませんでした

Windows AzureストレージNuGetパッケージバージョン4.1.0を使用しています。これはMicrosoft.Data.ODataに依存しており、Microsoft.Data.Edm dllを持つパッケージも追加しています。アプリケーションをビルドして実行すると、非常にまれに次のエラーが発生します。

Could not load file or Assembly 'Microsoft.Data.Edm' or one of its dependencies. The
located Assembly's manifest definition does not match the Assembly reference. (Exception
from HRESULT: 0x80131040)

Web.configには次のバインディングリダイレクトがあり、チェックも行っています。これは、ソリューション内のプロジェクトで参照されるMicrosoft.Data.Edmの唯一のバージョンです。

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
  </dependentAssembly>

Binフォルダーを見ると、Microsoft.Data.Edmのdllバージョンがv 5.6.0であることがあります。私はすべてのプロジェクトを経験しましたが、ストレージクライアントを除いてMicrosoft.Data.Edmへの参照を見つけることができません。これは間違いなく5.6.1です。

5.6.0バージョンがどこから来ているのかを試して解決する最良の方法は何ですか?このエラーが発生した場合、binフォルダーとobjフォルダーを削除して再構築すると、5.6.1バージョンが正常に機能し、すべてが機能しますが、最終的には再び発生します。

編集:

NuGetのすべての最新バージョンに再度アップグレードしましたが、まだ運がありません。次の依存関係を示すツールを実行しました。

Possible conflicts for Microsoft.Data.Edm:

Microsoft.Data.OData      references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Data.Services.Client references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.Edm, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Possible conflicts for Microsoft.Data.OData:

Microsoft.Data.Services.Client references Microsoft.Data.OData, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

私が理解していないのは、アプリバインディングリダイレクトが設定されていることですが、2.6.0バージョンがコピーされ、2.6.2がコピーされることもあります。誰もこれがなぜ起こるのか知っていますか、以前にこの問題があったことはありません。

37
user351711

同じエラーメッセージが表示されましたが、問題はAzure製品とは無関係です。私の場合、ODataをバージョン3から4に更新しましたが、Nugetは非推奨のdllのリダイレクトをバインドしました。実際には、Microsoft.Data.Edm、Microsoft.Data.OData、System.Spatialの合計3つがありました。

私の解決策は、廃止されたバインディングリダイレクトを削除することでした。ビルドプロセスで削除されない場合は、binフォルダーにある古いdllも削除する必要があります。

20
Bill

私のチームのメンバーにとってこの問題を解決できると思われることの1つは、Visual Studioのすべてのインスタンスを閉じ、パッケージディレクトリの内容を削除し、Visual Studioを再度開き、パッケージを復元して再構築することです。ただし、これは常に機能するとは限りません。

Visual Studioのビルド出力の冗長性を高めて問題のあるプロジェクトを特定することで、マシンの1つで問題を追跡できました。

Increasing Visual Studio build output verbosity

次に、出力を検索し、「Microsoft.Data.Edm」を検索して問題のあるターゲットプロジェクトを特定しました。 Microsoft.Data.Edmへの間接的な依存関係があるように見えましたが、アセンブリがそのプロジェクトのパッケージとして明示的に含まれていないことに気付きました。そのため、Nugetパッケージコンソールを使用して、プロジェクトをターゲットにして実行しました:Install-Package Microsoft.Data.Edm問題を解決しました。

Install Package with Nuget

4
devinbost

あなたが試すことができるいくつかのことがあります:

  1. ビルド後イベントをチェックして、Microsoft.Data.Edm.dllファイルが手動でbinフォルダーにコピーされていないことを確認します。
  2. 他のパッケージがMicrosoft.Data.Edm 5.6.1に依存していないことを確認してください。これを行う簡単な方法は、package.configファイルを見ることです。
  3. コードがソース管理にある場合は、誰もbinフォルダーをチェックインしないようにしてください。この基本的なルールを知らない人が多いことに驚いています。
  4. WindowsAzure.StorageおよびMicrosoft.Data.Edmパッケージをアンインストールします。その後、再度インストールし、安定バージョンのみをインストールするようにしてください。

HTH。

3
stack247

私は今日、同様のケースに遭遇しました、私の状況では、ビルドは常に古いバージョンのDLLをデバッグフォルダにコピーします、理由は私のプロジェクトはこのDLLを直接参照していないため、このDLLを参照する別のプロジェクトを参照しています.
したがって、ビルド時に、プロジェクトはGACまたはその他の場所から古いバージョンを見つけます。
プロジェクト内のこのdllを適切な場所から明示的に参照することで解決しました。
このような:

<Reference Include="Microsoft.Data.Services.Client, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\Microsoft.Data.Services.Client.5.6.1\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
</Reference>
2
dasons

ビルドサーバーで同じ問題が発生したばかりで、ビルド出力を確認すると、次のことに気付きました。

「C:\ Program Files(x86)\ Microsoft WCF Data Services\5.6\bin.NETFramework\Microsoft.Data.Edm.dll」から「bin\Microsoft.Data.Edm.dll」にファイルをコピーしています。

私のマシン上にないビルドサーバーに何かがインストールされているようですので、それを追跡する必要があります。

2
Carl

多分IIS(このアセンブリはアプリケーションの起動時に最初に読み込まれると思います)の仮想パスの問題かもしれません。

ディスク上の異なる場所から2つのプロジェクトを開始すると、同じ仮想パスで同じ問題が発生しました。

解決策は、このパスをIISから削除し、IISプロセスをリセットし、VSから仮想パスを再度作成します。

1
holder

それを見つけた!!
app.configファイル内でbindingredirectバージョンを変更します。
bindingredirect要素は、例外が苦情を言っているバージョンを参照するようにし、例外はなくなります。
説明:
おそらくapp.configファイルとプロジェクト参照Assemblyが同期しなくなり、エラーが発生しました。

<runtime>
                <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
                        <dependentAssembly>
                                <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                                <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
                        </dependentAssembly>
                </assemblyBinding>
        </runtime>
1

これは、Visual Studioを閉じて再度開くことで正常に解決されました。

0
BCarpe

1)ビルドの詳細度を詳細に変更2)Microsoft.Data.Edmを検索し、プロジェクトで使用される他のアセンブリのバージョンを比較3)他のアセンブリで使用されるバージョンに更新

私の問題を解決しました

0
Michael Staples

私にとっては、Microsoft.Data.Edmを含む多くのアセンブリを削除するWindowsAzure.MobileServices.Backend.Entity NuGetパッケージをアンインストールする必要がありました。そして、私はちょうどそれを再インストールし、奇跡的に、うまくいきました!

これは私のAzure Mobile Services WebApiプロジェクトにあったため、動作する必要がありましたが、ありがたいことに今は動作します。

これがお役に立てば幸いです。

0
King Wilder

「packages」フォルダを削除し、パッケージを再インストールした後、このエラーが発生しました。 「Clean Solution」と「Rebuild Solution」を実行してエラーを解決できました。

0
Brent Keller