エラーになりました
System.IO.FileLoadException:ファイルまたはアセンブリ 'Newtonsoft.Json、バージョン= 4.5.0.0、カルチャ=ニュートラル、PublicKeyToken = 30ad4fe6b2a6aeed'、またはその依存関係の1つをロードできませんでした。見つかった議会のマニフェスト定義が議会の参照と一致しません。 (HRESULTからの例外:0x80131040)
私のCIビルド用
私が試した解決策
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
それはまた働かなかった
パッケージマネージャコンソールで、Update-Package –reinstall Newtonsoft.Json
を実行します。
UPDATE
私はもともとこれをコメントとして投稿しましたが@OwenBlackerが示唆したようにここにそれを置くだけです:
それでもこれを実行してもエラーが発生する場合は、最終的に私にうまくいったのは私の<dependentAssembly>
ファイルからJson.Netの.config
セクションを削除したことです。再インストールすると、再インストールされない場合は元に戻し、削除する必要があるようです。パッケージ自体に通常の解決策があるまで、この手動の手順は必須です。
注:これを実行する前に、以下のコメントを読んでください。
下記のRenéのコメントによればBE AWAREはあなたのソリューションのすべてのプロジェクトで答えに投稿されたコマンドがパッケージを再インストールするということです。したがって、複数のプロジェクトでNewtonsoft.Jsonパッケージを使用していて、異なるバージョンを使用している場合は、上記のコマンドを実行するだけでは望ましくない結果になる可能性があります。
Newtonsoft.Json v4.5バージョンで問題がある方は、web.configまたはapp.configでこれを使ってみてください。
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
_ important _ :設定ファイルのconfiguration
タグにネームスペース属性がないことを確認します( https://stackoverflow.com/a/12011221/150370 で推奨されているように)。そうでなければ、assemblyBinding
タグは無視されます。
重要な点は、設定ファイルで正しいバージョンを参照することです。
ステップ;
1 - プロジェクト参照プロパティ内のNewtonsoft.Json.dllのバージョンは、パッケージフォルダ内のバージョンです(例:mineは7.0.1、参照バージョンは7.0.0.0)。
2 - 例外であなたからプロジェクトが期待するものを見てください
3-それがあるべきであるようにあなたの設定ファイルに依存アセンブリを追加してください..
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
私はここに提示されている解決策(アンインストール、再インストール、参照の削除、bindingRedirectsの作成など)のいずれにも失敗しました。以前のバージョンのNewtonsoftに戻る必要がありました。バージョン5.0.6は以前に動作していたので、私はそれを試しました。パッケージコンソールでこれら2つのコマンドを入力する必要がありました。
uninstall-package newtonsoft.json -force
install-package newtonsoft.json -version "5.0.6"
最初のコマンドの-force
オプションは、アンインストールを強制するために必要です。他のアセンブリとの依存関係はそれなしでアンインストールを防ぎます。
このバインディングリダイレクトを.configファイルに追加することで問題を解決しました。
<runtime>
. . .
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
エラーメッセージはバージョン4.5.0.0、Newtonsoft.Jsonの現在のバージョンが見つからないことについて不平を言うのでリダイレクトは4.5から6.0へ行くべきであり、その逆ではありません
間違ったターゲットを指していると思います。6.0ではなく4.5に変更してください。
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
これでうまくいくはずです。
私はこのイライラする問題を解決するために数日を費やしました。私はウェブ上で見つけることができるほとんどすべてを試しました。最後に、私はこのエラーが(私の場合のように)1つの解決策の異なる.Netプロジェクトバージョン(4.5と4.5.1)によって引き起こされる可能性があることを見つけました。以下の手順で修正しました。
Properties
に行きます。可能であれば、 all projectsに同じ.NETバージョンを設定してください。そうでない場合は、少なくともスタートアッププロジェクトを変更してみてください(私にとってはこれが問題の原因となっていたものです)。
ソリューションからすべてのNewtonsoft.Json
パックを削除します。
uninstall-package newtonsoft.json -force
以下のように、すべてのNewtonsoft.Json
ファイル内のすべてのpackages.config
バージョンを更新します。
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
次のコマンドを使用して、「Package Managerコンソール」からNewtonsoft.Json
を再インストールします。
install-package newtonsoft.json
ソリューションを再構築する
(オプション)7.スタートアッププロジェクトを変更した場合は、もう一度返します。
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
私のためにトリックをしました:)
WebApi RESTサービスクライアントを作成していたので、私の場合は、次のようにしてSystem.Net.Http
パッケージを手動で追加したときに、Add Referenceを使用して手動でSystem.Net.Http.Formatting
およびMicrosoft.AspNet.WebApi.Client
アセンブリにReferencesを追加しました。 ヌゲット。 また別の質問に対するこの答え を参照してください。
プロジェクトの参照からNewtonsoft.Jsonアセンブリを削除して、もう一度追加します。あなたはおそらく、誤ってdllを削除または交換したでしょう。
あなたが同じソリューションと他の1つのチェックのライブラリで複数のプロジェクトを使用している場合、すべてのプロジェクトはNewtonsoft.Jsonの同じバージョンを持っています
ソリューションには2つの異なるバージョンのJSON.NETライブラリがあります。これを解決するには、それらを最新バージョンにアップグレードする必要があります。次の手順を実行します:
1 - ソリューションエクスプローラー2 - ソリューション名を右クリック3 - ソリューション用のNugetパッケージの管理を選択4 - メニューからアップデートを選択5 - JSON.NETパッケージを更新
これで問題は解決します。
正しいバージョンをCIマシンにデプロイする
これは、アセンブリローダーが、Newtonsoft.Json
アセンブリの異なるバージョンを見つけたことを示しています。これは、プロジェクトで作成した参照と一致しません。アセンブリを正しくロードするには、アセンブリコードをコンパイル済みコードと並べて配置するか、正しいバージョンのアセンブリをインストール先のマシン(GACなど)にインストールする必要があります。
代替案:設定が正しいファイルにあることを確認してください
現在の解決策を維持し、異なるバージョンのアセンブリをロードする場合は、投稿した設定が正しい.config
ファイルにあることを確認してください。 xpto.dll.config
がないことを忘れないでください、アプリケーションによってロードされるDLLは常に実行中のアプリケーションの設定ファイルを使用します。
通常、バインディングリダイレクトを追加することでこの問題は解決されるはずですが、私にはうまくいきませんでした。私の頭を壁にぶつけた数時間後、私はweb.configでxmlns属性が問題を引き起こしていることに気付きました。 Web.configの構成ノードからxmlns属性を削除した後、バインディングリダイレクトは期待どおりに機能しました。
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
私のために動作します....ちょうどあなたが使用しているバージョンをnewVersionに入れてください。すなわち、(newVersion = "7.0.0.0")
解決策を閉じる。
テキストエディタでpackages.config
と*.csproj
を開き、Newtonsoft.Jsonがある行をすべて削除します。
例:<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>
または<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
再度ソリューションを開いてInstall-Package Newtonsoft.Json
のNewtonsoft.Jsonを再インストールしてください
それは私のために働きます。
サーバーのweb.configファイルを更新する必要があります。新規インストールNewtonSoftがこのコードを含めてこのファイルを更新するとき
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
私たちはあなたが言ったのとまったく同じ問題を抱えていました。私たちはCIを通してテストを実行するためにnunitを使用しています、そして私たちは実行するためのテストdllフィクスチャのリストを記述するtests.nunitと呼ばれるファイルを実行するnunitを持っています。
それぞれのテストフィクスチャはそれ自身の設定ファイルを持っていました、しかし "tests.nunit"ファイルを通して実行されるとき、バインディングリダイレクトは無視されるようです。解決策は、バインディングのリダイレクトを "tests.nunit"ファイルの横にある "config.config"という新しい設定ファイルに追加することでした。
Newtonsoft.Json Newtonsoftプロパティのバージョンを確認するだけ
それならあなたはあなたのWeb設定にそのバージョンを追加する必要があります(私の場合8.0.0.0) Web設定
私はバージョン7.0.0.0と全く同じ問題を抱えていました、そして私の問題を引き起こしているlibは Microsoft.Rest.ClientRuntime 何らかの方法で正しい依存関係にもかかわらずNewtonsoft.jsonの間違ったバージョン(6.0.0.0)を参照していましたナゲットの管理(newtonsoft.json(7.0.0.0)の正しいバージョンがインストールされている)。
私は設定ファイルで6.0.0.0から7.0.0.0への(Kadir Canからの)上記のリダイレクションを適用することによってこれを解決しました:
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />
---->何も変更せずに数日後、それは同じエラーで再び現れました。私はバージョン6.0.0.0をインストールしました。
私の場合、メインプロジェクトは まだNewtonsoft.Jsonの古いバージョンを参照していました これ以上プロジェクトには存在しません(黄色の感嘆符で示されています)。参照を削除すると問題が解決し、bindingRedirectは必要ありませんでした。
私は同じ種類の問題を抱えています。そして、私はまた次のようにしてそれを解決しました:TOOLS> NuGet Package Managerに行き、_ Package Manager Console。最後に、以下の2つのコマンドを実行します。
別の厄介な問題は、要素が他のdependentAssembly要素に対して誤った構成を持つ場合、バインディングリダイレクトが単に黙って失敗する可能性があることです。
各要素の下に要素が1つだけあることを確認してください。
場合によっては、VSがこれを生成します。
<dependentAssembly>
<assemblyIdentity ...
<assemblyIdentity ...
</dependentAssembly>
の代わりに
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
これが問題であることを実感するのに長い時間をかけました!
.Net 4.5用のNewtonSoft .dllファイルを追加するのを間違えました。
私のメインプロジェクト は 4.5でしたが、ソリューションに追加プロジェクトを追加したときに奇妙にもそれを.Net 2.0プロジェクトに追加しました...そしてこれにNewtonSoftの4.5 dllを使用しようとしたとき、 "" Newtonsoft.Jsonが見つかりませんでした "エラー。
解決策は(もちろん)この新しいプロジェクトを.Net 2.0から4.5に変更することでした。
上に挙げたものは何も役に立ちませんでしたが、実際に修正されたのは次のとおりです。
Get-Project -All | Add-BindingRedirect
参照: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-Assembly-NuGet-Assembly-Redirects.aspx
私は同じエラーに直面していて何時間もそれに苦労しました。 Newtonsoft.jsonを使用しているWeb APIプロジェクトと、そのWeb APIプロジェクト用の別のUnitTestプロジェクトがありました。単体テストプロジェクトにもNewtonsoft.json参照が必要でした。しかし、リンクを追加すると、上記の例外が発生しました。
私は最終的にユニットテストプロジェクトのapp.configに以下のコードスニペットを追加することでそれを解決しました:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
私の場合は、アセンブリをダウンロードしてプロジェクトへの参照を追加した後、プロジェクトに参照を追加する前にDLLのブロックを解除することでこれを解決しました。
Windowsエクスプローラを使用してDLLの場所を参照し、DLLを右クリックして[プロパティ]を選択します。タブの1つに[ブロック解除]ボタンが表示されたら、参照を追加するとアセンブリが正しく読み込まれます。
Nugetを通じてnewtonsoftパッケージを再インストールしても私にはうまくいきませんでした。この問題を回避するには、JsonConvert.DeserializeObjectを手動で呼び出す必要がありました。
私が変更され
HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
MyObject data = await response.Content.ReadAsAsync<MyObject>();
For
HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
string jsonStr = await response.Content.ReadAsStringAsync();
MyObject data = JsonConvert.DeserializeObject<MyObject>(jsonStr);
プロジェクトを右クリックして[Nugetパッケージの管理]を選択し、検索ボックスに「newtonsoft」と入力して最新バージョンをインストールします。それからあなたのアプリを実行します
以下のセクションであなたのweb.configに追加してください
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
エラーがローカルで消え、それでもサーバーに表示される場合、私と一緒に動作する解決策はbinフォルダとpackages.configとweb.configを削除してこれらのファイルを再アップロードすることです。
公開トピックに対するもう1つのアドバイス。 [Analyze]を実行した後にエラーが表示されます。プロジェクト設定で何かが変更されました。問題は、
プロジェクト/設定/ビルド/プラットフォームターゲット
"Any CPU" 。
x86 (または、場合によっては x64 )に戻すことで問題は解決しました。
私にとっての問題は、Newtonsoft.Jsonの非推奨バージョンです。再インストールは助けにはならなかった。
Visual Studioで、[ツール] - > [NuGetパッケージの管理]に移動します。更新を選択します。 Newtonsoftを検索します。更新をクリックして最新バージョンをインストールします。
また、NuGetリストアを使用するCI環境では、部分フォルダをソース管理にチェックインしないようにしてください。デフォルトでは、フォルダをソース管理に追加すると、自動的にアセンブリが除外されます。その上、これはビルド時にnugetパッケージを復元するという全ての目的を無効にします。アセンブリをチェックするか、パッケージフォルダをチェックインしないことでビルドは成功しますが、より良い方法は、不要なパッケージをソース管理にチェックインしないことです。
私はNugetパッケージをインストールすることでこの問題を解決しました:Microsoft ASP.NET Web API 2.2クライアントライブラリ。これにより、newtonsoft.jsonバージョン6.04がインストールされました。
ここで多くの答えから離れて、私はそれを追加する何かを見つけました。最初のポイント、dllがGACから参照されていないことを確認してくださいこれから、
Newtonsoft.Jsonのdllを追加/変更している間、時々プロジェクトの* .csprojが変更されないか、変更されたjson dllのバージョンが解決策のcsprojに反映されないでしょう。
だからメモ帳+ +でプロジェクトを開き、Newtonsoft.Jsonを検索し、明示的に古いバージョンから新しいバージョンにJSONの名前を変更してください。
あなたは参照の中のプロパティからurライブラリのインストールされたバージョンを見つけることができます。私の場合は、8.0.0.0がインストールされていました。エラーはCould not load file or Assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.
を言う
だから私はweb.configの中に手動で以下を追加しなければなりませんでした
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="6.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
updating web.config with the following Assembly binding resolved the issue
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
私も一日かそこらのためにそれに苦労してきた、すべての解決策を試してみました。私を助けたのはapp.configの大文字をチェックすることでした。突然変更した後、publicKeyTokenではなくPublicKeyTokenを使用しました。