web-dev-qa-db-ja.com

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

DLLにコンパイルされるVS2017プロジェクトがあります。このプロジェクトは、他の誰かが作成したEXEによって呼び出されます。どちらのプロジェクトも.Net Framework 4.6.2を対象としています。 DLLメソッドの1つを書き換えてTupleを返し、関連するNuGetパッケージもインポートしました。プロジェクトをコンパイルすると、出力ディレクトリにSystem.ValueTuple.dllが含まれます。このディレクトリは、DLLが読み込まれ、EXEによって呼び出される他のマシンに展開されます。ただし、EXEがTupleを返すメソッドを呼び出そうとすると、クラッシュします。

予期しないエラーファイルまたはアセンブリ 'System.ValueTuple、Version = 4.0.1.0、Culture = neutral、PublicKeyToken = cc7b13ffcd2ddd51'またはその依存関係の1つをロードできませんでした。システムは、指定されたファイルを見つけることができません。

DLLと同じフォルダーにあるため、ファイルが見つからない理由がわかりません。明らかに、MSはこのアセンブリを.Net Framework 4.6.2に含めていません。

DLLはmachine.configファイルを使用してWindowsに登録されていることに注意してください。 System.ValueTuple.dllもこのファイルに追加すると動作することを推測しています(まだ試していませんが、これが最善のアプローチ、特に長期的であることを確信していません) .3このアセンブリが含まれることを期待していますか?

34
Mike Lowery

コンピューターのmachine.configファイルにSystem.ValueTupleを登録することで、この問題を解決しました(既に登録されているDLLと共に)。ただし、このアプローチは特に好きではありません。これは、いつでも変更される可能性のあるDLLバージョンに依存しているためです。 MSがこのアセンブリを.Net Frameworkの次のバージョンに追加することを願っています。

<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" />
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" newVersion="4.0.1.0" />
    <codeBase version="4.0.1.0" href="e:\exec\System.ValueTuple.dll" />
  </dependentAssembly>
  ...
</assemblyBinding>
</runtime>
6
Mike Lowery

私は自分でこの問題を抱えていました。開発中はLocalhost上ではなく、実稼働サーバー上のみ。最終的には、.Net Framework 4.6.1と、バージョン4.5.0でNugetからSystem.ValueTupleをインストールした私との間に何らかの競合があることが判明しました。

ソリューションは、System.ValueTuple Nugetパッケージを 4.3.0にダウングレードするその後、問題はなかったように機能しました。

これは、実稼働サーバーでのみ発生したものと思われます。これは、異なるバージョンの.netフレームワークがインストールされているためです。

21
Djensen

oKこれは完全に間違っていると感じますが、私はカットします

  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
  </dependentAssembly>

これはメインアプリケーションのweb.configからです。

私は実際に、基礎となる依存関係または何かがあるかどうかを確認するために何が起こったのかを見ただけで、それが実行されることを期待していませんでした。動作を続けただけで、ここ数日で追加したすべての新しい機能は動作します。

12
Robin Vessey

FWIW、Moqを使用したテストプロジェクトでこの問題が発生しました。誰かがプロジェクトを.NET 4.7に設定していましたが、私は4.6.2でした。まだ4.7に移行したくないので、ソリューションはMoq 4.7.145にバージョンをダウングレードすることでした。 System.ValueTuple v 4.3.1はそれと連動していました。

9
malckier

Nugetパッケージのバージョンが一致しない場合、同じ例外に直面しました。 (DLLでは4.3.1がメインプログラム4.3.0で使用されていました。)パッケージを同じバージョンにアップグレードすることで問題を解決しました...パッケージのバージョンの確認と統合はうまくいくと思いますあなたも。

8
Ondras

エラーが発生したマシンに.NET Framework 4.7.2 Runtimeをインストールすることで解決しました。 bindingRedirectを追加したり、NuGetパッケージをダウングレードしたりする必要はありません。

https://dotnet.Microsoft.com/download/dotnet-framework/net472

3
Ogglas

私の問題は、4.6.1に対して開発していましたが、4.7.2でリリースしていたことです。幸いなことに、このプロジェクトがどの.Netフレームワーク用に作成されたかは気にしないので、開発者インスタンスに4.7.2をインストールしてから、すべてのNugetパッケージをアップグレードしました。

AWS EC2でSQLiteを使用

1

.Net Frameworkを最新バージョンに更新できない場合は、パッケージ:Microsoft.Net.Compilersを2.10までのバージョンにダウングレードしてください。これで私の問題は解決しました。

0
Anwar

私は同じ問題を抱えていました。プロジェクトのターゲットフレームワークを.Net Framework 4.7.1に変更することで問題を解決します。

System.ValueTupleは.NET Framework 4.7をサポートするようになりました

0
Hamza Elm

.NET 4.5.1から4.6.1にアップグレードした後、AutoMapper 8.0.0.0がバージョン4.5に依存するという同じ問題がありました。オートマッパーnugetパッケージを再インストールするとうまくいきました。

0
Brian Swart