1. ホーム
  2. c#

[解決済み] ファイルまたはアセンブリ 'System.ValueTuple' を読み込むことができませんでした。

2023-05-22 03:46:39

質問

私は VS2017 プロジェクトを持っていて、それは DLL にコンパイルされ、他の人が書いた EXE によって呼び出されます。両方のプロジェクトは、.Net Framework 4.6.2をターゲットにしています。私は私のDLLメソッドの1つをタプルを返すように書き直し、関連するNuGetパッケージもインポートしました。プロジェクトをコンパイルすると、出力ディレクトリにSystem.ValueTuple.dllが含まれ、その後、他のマシンにデプロイされ、私のDLLはEXEによってロードされ、呼び出されます。しかし、EXEがタプルを返すメソッドを呼び出そうとすると、クラッシュします。

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

DLL と同じフォルダーにあるにもかかわらず、なぜファイルが見つからないのか理解できません。どうやら、MS はこのアセンブリを .Net Framework 4.6.2 に含めていないようです。

私の DLL は、Windows で machine.config ファイルを使用して登録されていることに注意してください。このファイルに System.ValueTuple.dll も追加すれば、動作するのではないかと推測しています (まだ試しておらず、これが最善の方法であるかどうか、特に長期的にはわかりません。)。4.6.3 を待ち、その中にこのアセンブリが含まれていることを期待する以外に、より良い方法があるでしょうか?

どのように解決するのですか?

私は、コンピュータの 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>