2017-08-16 4 views
0

私はローカルでうまく動作するC#アプリケーションを持っています。他の多くのC#プロジェクトに依存しています。ファイルまたはアセンブリをロードできませんでした「Newtonsoft.Json、バージョン= 4.5.0.0:私は実行時にDLLロードが失敗する

System.IO.FileLoadExceptionを示すエラーを取得することを実行したら、私は右、クリックして公開し、setup.exeを取得すると、Culture =ニュートラル、PublicKeyToken = 30ad4fe6b2a6aeed 'またはその依存関係の1つ。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)
ファイル名: 'Newtonsoft.Json、バージョン= 4.5.0.0、文化=中立、なPublicKeyToken = 30ad4fe6b2a6aeed'

これは、特に私のTwitterのプロジェクトから来ています。 twitterプロジェクトは参照していません4.5.0.0 6.0.0.0を参照してください

私はどこでも4.5.0.0への参照を見つけることができません..それはjsonを持ってtweetsharp-unofficial 2.3.1.2(https://github.com/timothy-makarov/tweetsharp)を使用しています。ネットの依存関係はありませんが、私は明示的に参照しています。

これはどうやって起こっているのか?

ありがとうございます!

+2

これは、異なるプロジェクトが同じnugetパッケージの異なるバージョンを参照する多くのことを起こるです。すべてのプロジェクトが同じソリューション内にある場合、あなたはnugetパッケージマネージャを開き、統合タブに移動し、それが不一致のバージョンを表示することができ、あなたのTwitterのプロジェクトの参照が4.5.0.0 – GBreen12

+0

を使用しなければならないプロジェクトの一つ。 GBreen12 @ – GBreen12

+0

は、私はあなたの声明に同意しません。* "これは、異なるプロジェクトが同じナゲットパッケージの異なるバージョンを参照する場合に発生します" *。これはランタイムエラーです.Nugetを使用するかどうかにかかわらず、独立して発生する可能性があります。あるプロジェクトがdllのv1を参照し、第2のプロジェクトを参照して同じdllのv2を参照する場合もあります。この場合、エラーは2つの異なるバージョンについて何か言います。プロジェクトが接続されていない場合、最後にビルドされたプロジェクトは単にbin内のdllを上書きし、実行時にはエラーが発生します。多くはここの状況によります。 –

答えて

1

さらにGBreenは、あなたが参照の上に持っているコントロールのレベルに応じて、上記の言うことに、また、あなたのweb.configにbindingRedirectsで見ることができます。以下のようなものは次のとおりです。

<!-- Upgrade of NewtonsoftJson.dll to version 6.0.2. The Web API/MVC 4 has been built with version 4.5 of NewtonsoftJson.dll, so we need a redirect in the web.config for now.--> 
<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> 
-1

をここでは、このエラーが何を意味するか:

をあなたがあなたのビンを持っているものより高いバージョンのNewtonsoftアセンブリを使用してDLLを構築しました。アセンブリのバージョンは、DLLマニフェストに書き込まれます。ロード中に、binのアセンブリのバージョンが低い場合、その例外がスローされます。さらに、バージョン(a.b.c.x) - abおよびcでは、3桁の数字しか問題になりません。例えば、バージョン1.0.0.11.0.0.2は互換性があります。 v6.0.0.0に対してDLLをビルドし、bin v4.5.0.0に入れると、問題が発生します。しかし、署名を変更するいくつかのメソッドを呼び出さない限り、あるいは署名したメソッドが署名を変更する他のメソッドを呼び出さない限り、逆は機能するはずです。どこでも同じバージョンを使用する -

1. 最善の解決策は、バージョン管理を統一することです。あなたは、ビンに高いバージョンのDLLを使用している場合は、それもあなたのapp.configにバージョンリダイレクトを追加することができ、同じDLLの下位バージョン

3. を使用してまたは内蔵されているアプリケーションのために働く必要があり

2. 。この特定の設定は、上位バージョンビルドを下位バージョンを使用するようにリダイレクトします。これは、この時点では、新しい機能がところで

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705"> 
    <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture=""/> 
     <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

と呼ばれていない限り、動作しますnewtonsoft現在のバージョンでは、9+

+0

Hm 。私は6.0.0.8を使用するようにすべてのプロジェクトを更新しましたが、4.5.0.0を持っていないと実行しても同じエラーが表示されます。 私は#3を試しましたが、私のapp.configにランタイムを置くと、私の.configファイルが生成されません。 (私はweb.configの仕事はapp.configプレースメントが違うことを知っています) –

+0

@JordanBrooklynあなたのすべてのプロジェクトがv6.0を参照しているので、 'config'に' assemblyBinding'がなくてもappを実行するようになりました。もしそれがうまくいかない場合...これをapp.configに追加することができない場合は(設定で ''が既に存在しているかどうかを確認し、内部の内容だけを追加してください)、あなたはいつも 'myApp.exe 'に直接追加できます。 config'。今度は ''に変更する必要があります。あなたはv4.5を参照し、 "特定のバージョン"に設定されているサードパーティを持っています。私が言うことを、私に知らせてください。ちょっと、ちょうどbinのdllが確かにv6であることを確認してください。 –

+0

私はもう一度やり直しました。そのブロックを自分のapp.config(私のコンソールアプリapp.configの設定タグの下に)に追加する瞬間、私は公開しません。 '' 'CacheConsoleApp.exe.config.deploy''' それはありませんマニフェストであっても。ランタイムタグをコメントアウトすると、設定が再び取得されます。なぜこれが起こっているのだろうか? –

関連する問題