VS 2013を使用してWindows 8.1上で以前にビルドされたWinJSプロジェクトがあります。
最近、空のJavascript Universal windows 10プロジェクトを作成してこのプロジェクトをUniversal Windows 10にアップグレードし、古いプロジェクトからすべてのファイルを追加しました。
WindowsランタイムコンポーネントとSQLiteのクラスライブラリもあります。
ユニバーサルWindowsランタイムコンポーネントとユニバーサルクラスライブラリを追加し、すべてのファイルを古いプロジェクトからそれぞれの場所にコピーしました。
どういうわけか私はすべてのビルドエラーを削除することができました。
必要なすべてのSQLite-net、ユニバーサルWindowsプラットフォーム用のSQLite、Newtonsoftなどをインストールしました。
しかし、アプリケーションを実行してWindowsランタイムコンポーネントでネイティブメソッドを呼び出すと、次のような奇妙なエラーが発生します。
An exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll but was not handled in user code.
Additional information: Could not load file or Assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.
Newtonsoftバージョン:9.0.1
Windowsランタイムコンポーネントの私のproject.jsonファイルには次のものがあります。
{
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
"Newtonsoft.Json": "9.0.1"
},
"frameworks": {
"uap10.0": {}
},
"runtimes": {
"win10-arm": {},
"win10-arm-aot": {},
"win10-x86": {},
"win10-x86-aot": {},
"win10-x64": {},
"win10-x64-aot": {}
}
}
私のVisual Studioバージョンは次のとおりです。
Newtonsoft jsonをすべて削除して再インストールしようとしましたが、うまくいきませんでした。
基本的なデモを作成し、この問題を再現しました。 WinRTコンポーネントがNewton.Json
の正しいアセンブリを見つけられなかったようです。一時的に回避策は、Newtonsoft.json.dll
ファイルを手動で追加することです。次の手順でこれを実現できます。
[参照設定]-> [参照の追加]-> [参照...]-> [C:\ Users\.nuget\packages\Newtonsoft.Json\9.0.1\lib\portable-net45 + wp80 + win8 + wpa81\Newtonsoft.jsonを検索します。 dll->「追加」ボタンをクリックします。
ランタイムコンポーネントプロジェクトをリビルドして実行します。このエラーはなくなるはずです。
Newtonsoft.JsonをスタートアッププロジェクトのNuGetに追加して、この問題を解決しました。
私も同じ問題を抱えていました。これを解決するために、Newtonsoft.Jsonのバージョンが更新された場合(おそらくしない)、プロジェクトのReferencesをチェックしてください。次に、それを削除して、Web.configまたはApp.configのいずれかの要素をチェックインします-dependentAssemblyが次のように更新されました。
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
その後、プロジェクトを再ビルド(dllは正しいバージョンに置き換えられます)
少し前に、新しいASP.NET Coreアプリケーションでも同様の問題が発生しました。参照されたライブラリの1つが、9.0.0.0より前のバージョンのNewtonsoft.Jsonを使用していたことが判明しました。そのため、そのライブラリのバージョンをアップグレードし、問題は解決しました。ここで同じことができるかどうかわからない
Visual Studio 2013 Update 2を使用しています。私の場合、1つのソリューションにWebプロジェクトとWeb Apiプロジェクト、ユニットテストプロジェクト、および他のクラスライブラリがあります。
私は問題を解決するために数日を費やしました。以下は、私が見つけた段階的な解決策です。
Newtonsoft.Json
パックPackage Manager Consoleからのクエリを使用して取得します[表示]> [他のウィンドウ]> [パッケージマネージャーコンソール])。アンインストールパッケージnewtonsoft.json -force
Newtonsoft.Json
fromPackage Manager Consoleインストールパッケージnewtonsoft.json
Newtonsoft.Json
をインストールしようとしたときに、次のエラーが発生しました。「Newtonsoft.Json 10.0.3」パッケージにはNuGetクライアントバージョン「2.12」以上が必要ですが、現在のNuGetバージョンiは「2.8.50313.46」です
[ツール]> [拡張機能と更新...]左ペインで..更新> Visual Studio Galleryを選択します。
更新(NuGetパッケージマネージャー拡張機能)その後の手順に従ってください。
Visual Studioは、その後にrestartを取ります。
手順6を実行もう一度。
インストール後、packages.configが次の行で追加されます
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net451" />
インストール後、web.configが以下の行で追加されます
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
他にエラーがなければ、正常に実行されます。
Newtonsoft.Json -Version GO to Tools => NuGet Package Manager => Package Manager Consoleと入力して、Package Manager ConsoleウィンドウにInstall-Package Newtonsoft.Json -Version 12.0.2と入力する必要があります。
ASP.NET Coreプロジェクトでも同様の問題が発生しました。 bin/debug-folderの.configファイルが次のように生成されます:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="6.0.0.0" newVersion="9.0.0.0" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
2番目のbindingRedirectを手動でこれに変更すると、動作します:
<bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0" />
なぜこれが起こるのか分かりません。
.Net Core SDK 1.0.0-preview2-1-003177でVisual Studio 2015を使用しています。
AutoCADは私のものを乗っ取ったと思う。私のために働いた解決策はそれをハイジャックすることでした。これを https://forums.autodesk.com/t5/navisworks-api/could-not-load-file-or-Assembly-newtonsoft-json/td-p/7028055?profile.language=から取得しましたen -はい、インターネットは神秘的な方法で機能します。
// in your initilizer ...
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
.....
private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
{
if (args.Name.Contains("Newtonsoft.Json"))
{
string assemblyFileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Newtonsoft.Json.dll";
return Assembly.LoadFrom(assemblyFileName);
}
else
return null;
}
構成ファイル(web.config)にNewtonsoft.Jsonのバインディングリダイレクト構成を追加すると、問題が解決します。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
あなたの場合のNewtonsoft.Jsonのバージョンは9であるため、構成内のバージョンを適切に更新します。
この構成が機能しない場合は、構成タグの名前空間(xmlns)が正しいことを確認するか、名前空間を完全に削除してください。
この問題を解決するのに1日かかりました。解決策は、web.configファイルでバージョン11.0.0を使用するようにWebサービスを強制することです。
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
私の場合、newtonバージョンを更新したときに、マシン上の構成ファイルweb.configに問題があったため、VSは新しいバージョンを指すようにweb.configファイルを自動的に修正しました。実稼働環境にアップロードしたとき、既存のweb.configは古いバージョンを指していました。
Web.configを更新すると、再び機能し始めました。
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
「Newtonsoft」バージョンを更新することにより、問題を解決することが可能です。
Visual Studio 2015では、[ソリューション]を右クリックして[ソリューションのNugetパッケージの管理]を選択し、[Newtonsoft]を検索して最新バージョンを選択し、[更新]をクリックします。
パッケージマネージャーを使用して、Newton.Jsonのバージョン(古いバージョン= 9.0.0.0から新しいバージョン11.0.0.0)を更新することで、asp.net mvcプロジェクトでこの問題を解決できました。