Visual Studio 2017-ファイルまたはアセンブリ 'System.Runtime、Version = 4.1.0.0'またはその依存関係の1つを読み込めませんでした


103

私はVisual Studio 2017を使用していますが、.Net Standard 1.5ライブラリを作成し、.Net 4.6.2 nUnitテストプロジェクトで使用しようとしています。

次のエラーが発生します...

ファイルまたはアセンブリ 'System.Runtime、Version = 4.1.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

私は以下を試しました:

  1. プロジェクト参照として標準ライブラリを参照します。エラー:以前のエラーを表示します。
  2. Stdライブラリ用のNuGet pkgを作成し、それを参照します。エラー:タイプはSystem.Stringです。System.Stringが必要です。これは、System.Runtimeがプロジェクトによって参照されてしまい、すべての標準型の定義があるためです。
  3. NuGet pkg NetStandard.Libraryを参照してください。エラー:#と同じエラーが発生します(「タイプはSystem.Stringで、System.Stringが必要です」)。注:これを行う前に、プロジェクトからすべてのNuGetパッケージをクリアし、nUnitパッケージとNetStandard.Libraryパッケージ(45個の他のパッケージをインストール)のみを追加しました。

これはバグですか?回避策はありますか?どんな助けでもありがたいです。

回答:


91

私は同じ問題を抱えていて、提案された解決策は機能しませんでした。この問題に対する私の解決策は、App.configとpackages.configをチェックして、バージョンが一致するかどうかを確認することでした。

もともと私のapp.configに含まれていました:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>

しかし、packages.configには以下が含まれています:

<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />

app.configエントリを変更して、newVersionのpackages.configに一致させました。

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>

変更後、問題は解決されました。


または、web.configへの参照を追加してください:stackoverflow.com/a/38603514/1145177
Doug S

7
NuGetから「4.3.0」をプルしましたが、何らかの理由でVSは「4.1.2.0」を参照すると主張し、異なるバージョン番号のみの同様の作業が私のために機能しました...
David Rogers

MSTestプロジェクトで@DavidRogersと同じ問題が発生しました。app.configとpackages.configの違いを統合することで問題は解決しました。
オクタン酸

うん、たくさんありがとう!これは、私のMSTestがテストを見つけられないための解決策でした [MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc
Dan M

解決策は私のために働いた。HtmlAgilityPack NUGETのインストール後に問題が発生しました。また、パッケージのバージョン情報が正しくないため、実行されませんでした。+1
ロベルト

35

この問題は、.NET 4.xプロジェクトから.NET Standardプロジェクトを参照するときに発生します。.NETStandardプロジェクトのnugetパッケージ参照は、依存関係として取り込まれません。

これを修正するには、.NET 4.x csprojファイルが現在のビルドツール(少なくとも14)を指していることを確認する必要があります。

<Project ToolsVersion="15.0">...

以下はもはや必要ではなく、VS 15.3で修正されました:

既知のバグがありましたVS2017、特にNuGet 4.0。

バグを回避するには、.NET 4.xプロジェクトの.csprojファイルを開いて、次のスニペットを追加する必要があります。

<ItemGroup>
  <PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
    <PrivateAssets>All</PrivateAssets>
  </PackageReference>
</ItemGroup>

NuGet 4.xには "パッケージリファレンス"が含まれています-packages.configはありません-VS2017のリリース時に古い4.xパイプラインは完全に更新されていませんでした。上記のスニペットは、ビルドシステムを「起動」して、依存関係からのパッケージ参照を正しく含めるようです。


Visual Studio 17のどのアップデートですか?バージョンを指定できますか?
Ronak Agrawal 2017

11
15.5.5 VS2017でもまだ問題があります。他の原因があるようです。
SerG 2018

質問:あなたの.NET 4.xプロジェクトはパッケージ参照を使用していますか、それともpackages.configをまだ使用していますか?これが修正されたように見える理由は、packages.configを削除したためかと思います。
Cory Nelson

2
Visual Studio 2017バージョン15.7以降では、packages.config管理形式からPackageReference形式へのプロジェクトの移行がサポートされていることに注意してください。 docs.microsoft.com/en-us/nuget/reference/...
静かな沼

@tranquiltarn from your link: "移行は現在C ++およびASP.NETプロジェクトでは利用できません。"
JP Hellemons

34

私は最近この問題に遭遇し、このスレッドなどで言及されている多くのことを試しました。私はパッケージ参照を追加"System.Runtime"で結合redictsを固定し、nugetパッケージマネージャによってapp.config、およびていることを確認しapp.configpackage.configアセンブリのための同じバージョンを持っています。ただし、問題は解決しませんでした。

最後に、<dependentAssembly>アセンブリのタグを削除し、問題は消えました。したがって、で以下を削除してみてくださいapp.config

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>

編集: .NET Frameworkを4.7.2に更新した後、問題が再び発生しました。上記のトリックを試しましたが、うまくいきませんでした。何時間も費やした後System.Linq、app.configの古い参照が原因で問題が発生していることに気付きました。したがって、すべてのLinq参照を削除または更新して、この問題を解消します。


4
OPで指定された問題に遭遇するたびに、.configファイルのSystem.Runtime情報を削除し、これで解決します。これは有効な解決策となる可能性があることは同意します。nugetからパッケージを追加すると、よく起こります。
ウォレスB.マクルーア2018

私のために働いた。xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0プロジェクトを4.7.2にアップグレードした後にエラーが発生しました
Anton Krouglov

あなたの答えに基づいて、私は私のnugetパッケージをチェックし、「Google.protobufのニーズ、私のプロジェクト間のthnxを(統合)が発見
Osama_Almaani

28

私を信じて、私は冗談ではありません。すべてのSystem.Runtime依存関係をapp.configから削除すると、動作し始めます。


9
なぜこれが機能するのかについてのより良い説明が役立つでしょう。
Dour High Arch

この方法の問題は、nugetパッケージを更新するか、新しいnugetパッケージを追加するたびに、再度追加されることです。
Vibgy

16

私は、参照することにより、そのエラーを解決しNetStandard.Libraryし、次のapp.config NUnitの-プロジェクトのファイルを。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

編集する

以外System.RuntimeSystem.ReflectionまたはSystem.Runtime.InteropServices不足している場合(例System.Linq:)、新しいdependentAssemblyノードを追加します。

編集2

新しいVisual Studioバージョン(2017 15.8だと思います)では、Studioがapp.configファイルを作成する可能性があります。Project-Properties-ApplicationAuto-generate binding redirects Checkboxをチェックするだけです。 バインディングリダイレクトの自動生成

編集3

バインディングリダイレクトの自動生成は、.NETクラスライブラリではうまく機能しません。次の行をcsprojファイルに追加すると、これが解決され、Classlibaryの有効な.configファイルが生成されます。

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

11
変なふうに、私はで私のために問題を修正削除するすべての<dependentAssembly>... System.Runtimeのためのノードを
マット・ブリューワートン

@MattBrewertonが確認しました!
Bart De Boeck

13

私は自分を削除することによって、それを固定app.configして

<assemblyIdentity name="System.Runtime" ....> 

エントリ。

app.config リファクタリング中に自動的に追加された(ただし必須ではない)


これは私のために働いた!他のすべてのアイテムがうまくいかない場合は、
ぜひ

3

この問題は、.NET 4.xプロジェクトから.NET Standardプロジェクトを参照するときに発生します。.NETStandardプロジェクトのnugetパッケージ参照は、依存関係として取り込まれません。

System.Runtime 4.3とNETStandard.Libraryパッケージを追加して解決しました。私はリファクタリングツールを使用してSystem.Runtime.dllのバージョンを調べていますが、そうでは4.1.1.1なく4.3、.configにbindingRedirectを追加しています

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.1.1.1" />
</dependentAssembly>

3

遅すぎるので、うまくいきません。別のウェブサイトから答えを見つけました。System.Runtime assemblydependencyを削除すると問題が修正されました。これを削除しました。

<dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/> </dependentAssembly>

宜しくお願いします


2

dotnetフレームワーク4.6.2をターゲットとするNUnit 2.6.4プロジェクトでこれに問題がありました。HumanizerSystem.Runtime FileNotFoundを使用しようとすると、エラーが発生しました。

単体テストプロジェクトにNetStandard.Libraryをインストールして、エラーを修正しました。


2

AutoGenerateBindingRedirectsこの問題の原因である可能性があることがわかりました。

観察:同じプロジェクトをターゲットnet45としておりnetstandard1.5、1台のマシンで正常にビルドされ、もう1台のマシンでビルドに失敗しました。マシンには異なるバージョンのフレームワークがインストールされていました(4.6.1-成功および4.7.1-失敗)。最初のマシンのフレームワークを4.7.1にアップグレードした後、ビルドも失敗しました。

Error Message:
 System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
  ----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Auto binding redirectsの機能です.net 4.5.1。nugetがプロジェクトが同じアセンブリの異なるバージョンを推移的に参照していることを検出すると、すべてのバージョンを必要な最高バージョンにリダイレクトする出力ディレクトリに構成ファイルが自動的に生成されます。

私たちのケースでは、のすべてのバージョンがに再バインドさSystem.RuntimeれましたVersion=4.1.0.0。ランタイムのバージョンが.net 4.7.1付属してい4.3.0.0ます。そのため、リダイレクトバインディングは、最新バージョンのフレームワークでは利用できなかったバージョンにマッピングされていました。

この問題は、4.5ターゲットの自動バインディングリダイレクトを無効にし、.netコアのみに残すことで修正されました。

<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
  <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

2

この問題には多くの原因があります...私の場合、問題は私のweb.configにSystem.Runtimeアセンブリを追加するタグでした:

<assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

しかし、1つのパッケージは他のバージョンとの依存関係として同じアセンブリも追加しました:

<package id="System.Runtime" version="4.3.0" targetFramework="net47" />

web.configから「アセンブリの追加」タグを削除すると、問題が解決しました。


2

この問題は、packages.configとapp.configの間にバージョンの競合がある場合に発生するようです。app.configには、「AutoGenerateBindingRedirects」と呼ばれるものによって自動的に生成されるアセンブリバインディングリダイレクトがあります。nugetパッケージをダウンロードするたびに有効になると、packages.configに新しいエントリを作成することに加えて、このバインディングリダイレクト情報をapp.configに追加します。これの目的は次のとおりです。アセンブリバインディングリダイレクト:方法と理由

そこで、ユーザー@Evkが書いた内容を読むことができます。

なぜバインドリダイレクトが必要なのですか?ライブラリーBを参照するアプリケーションAと、バージョン1.1.2.5のライブラリーCがあるとします。ライブラリーBは、ライブラリーCも参照しますが、バージョンは1.1.1.0です。実行時に同じアセンブリの異なるバージョンをロードできないため、ここで競合が発生します。この競合を解決するには、通常は新しいバージョンへのバインディングリダイレクトを使用します。

したがって、 クイックフィックス: app.configのすべてのエントリを削除します。

私の場合、そのプログラムを実行するだけで機能し始めましたが、実行時に同じアセンブリのバージョンの競合がない場合にのみ機能するでしょう。

このような競合がある場合は、app.configでこれらのバージョン番号を修正して、実際に使用されるアセンブリのバージョンと一致させる必要がありますが、手動プロセスは面倒なので、パッケージマネージャーコンソールを開いて再度自動生成し、次のように入力してパッケージの再インストールを実行することをお勧めします Update-Package -reinstall


1

私は.NET 4.6.1 Webサイトで何度もこの状況に陥っていました。別の.NET Coreプロジェクトへの参照を追加するたびに問題が発生しました。ビルドすると、Visual Studioはそのようなクロスフレームワークの参照が無効であることを正しく警告し、プロジェクトの参照をすぐに削除しました。その後、プロジェクトは正常にビルドされましたが、WebサイトにアクセスするとSystem.Runtimeエラーが表示され、離れることを拒否しました。

毎回の修正は不十分でしたが効果的でした。プロジェクトディレクトリを削除し、ソース管理から再ダウンロードしました。前後に違いはありませんでしたが、プロジェクトを構築してページにアクセスすることができました。


1

Nugetを介してMsTest V2を追加した後、ユニットテストプロジェクトでこれに遭遇しました。app.configの名前を変更する(効果的に削除する)と、私にとってはうまくいきました。

上記の投稿をすべて読んでも、まだ理由がわかりません。申し訳ありません。



1

app.configまたはweb.configに追加

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

1

同じ問題のあるプロジェクトがありましたが、dotnetコアのバージョンを2.2から2.0に変更して解決しました。問題が解決しない場合は、この解決策を試してください


1

単体テストを実行する前に、app.configファイルからランタイムタグを削除するだけです。問題は解決されます。


0

VS 2017 15.45でも同様の問題がありました。プロジェクトをコンパイルして実行したにもかかわらず、TPL Dataflowオブジェクトにアクセスしようとすると、System.Runtimeに関してsystem.IO.FileNotFoundExceptionが発生することが確認されました。

ソリューションでプロジェクトを確認したところ、そのうちの1つ(一番上のプロジェクト)には、基礎となるプロジェクトで使用されるSystem.Runtimeパッケージがありませんでした。Nugetからインストールすると、すべて正常に動作しました。


0

ここですべての解決策を試しましたが、役に立ちませんでした。最終的には、新しいcsprojファイルを開いて次のセクションを手動で追加して解決しました。

<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>

0

私はASP.Net CORE 2.1を使用していますが、大きなリポジトリで約40のリストから.csprojを選択して実行すると、このエラーが発生しました。csprojファイルを個別に開くと、エラーが解決しました。csprojを開いたとき、プログラムの起動方法が一部異なりました。


0

.NET 4.7.2 => .NET 4.5.2から切り替えて472に戻すことで、この問題を解決します。パッケージマネージャーが依存関係を解決できないため、このエラーが発生する場合があります。


0

以前に機能している場合は、App.configが変更されているはずです。元に戻すApp.configは私のために働いた。


0

私はまた、このエラーを経験し、それをどのように解消したかを共有しました。

私の場合、以下の行がwebapiプロジェクトのweb.configに存在しましたが、package.configファイルにパッケージ参照がありませんでした。

WebapiプロジェクトのWeb.configのコード

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.3.0" />
</dependentAssembly>

要素を閉じる前に、Web APIプロジェクトのpackages.configファイルにコードIを追加しました。

<package id="System.Runtime" version="4.3.0" targetFramework="net461" />

私のケースで機能した別のソリューション:

別のパッケージバージョンがほとんどない別のコンピューターシステムにプロジェクトをコピーした場合に機能する可能性のあるもう1つの確実なショート。実行時に、アセンブリのバージョンをWebサイト/ webapiでエラーで指定されたバージョンに変更してみてください。この場合のように、質問にあるように、必要なバージョンは「4.1.0.0」なので、web.configの現在のバージョンを、以下のようにエラーで表示されるバージョンに変更してみてください。

エラー:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies

バージョンCHange


0

Azure関数を構築するときにこのエラーが発生しました(キュートリガーを使用して、違いが生じた場合)

この場合の問題は、AzureFunctionsVersionがv3ではなくv2に設定されていたためです。VS2019経由で更新するには、プロジェクトをアンロードしてから、csprojファイルを編集します。PropertyGroupノード内で、以下を追加/編集します。

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