良い質問。特定の問題について、解決された依存関係に不一致があるようです。このようなことが発生するのは、互換性のないdnxでアプリケーションを実行しているためと考えられます。私たちはまだ非常に大きな変更を行っているので、missingタイプのメソッドが見つからない場合は、betaX
パッケージをbetaY
実行したり、dnxを実行したりする可能性があります。
さらに具体的には、アセンブリニュートラルインターフェイスはベータ4で削除されましたが、実行中のアプリケーションがまだそれらを使用しているようです。
エラーメッセージをより明確にするために、パッケージが実行に必要な最小dnxをパッケージでマークできるようにする予定です。また、時間が経つにつれ、重大な変更はなくなります。
しかし、一般的には、dnxを使用するときにこのような問題を診断する方法についてのガイドを書いた時期だと感じています(既存の.NETとはかなり異なるため)。
入力した依存関係project.json
は最上位のみです。バージョンも常に最小値です(NuGetパッケージと同じです)。これは、指定するFoo 1.0.0-beta4
ときに本当に指定することを意味しますFoo >= 1.0.0-beta4
。つまりMVC 0.0.1
、構成したフィードの最小バージョンがである場合、そのバージョンMVC 3.0.0
が取得されます。また、決してあなたがそれを指定しない限り、あなたのバージョンをフロートません。1.0.0を要求してそれが存在する場合、新しいバージョンが存在していても1.0.0を取得します。空のバージョンを指定することは常に悪いことであり、後のビルドでは許可されません。
フローティングバージョンと呼ばれるnugetに導入する新機能があります。現在はプレリリースタグでのみ機能しますが、次のバージョンでは、バージョンのより多くの部分で機能します。これは、パッケージ仕様ファイルでバージョン範囲を指定するためのnpmおよびgem構文に似ています。
1.0.0-*
-意味が、プレフィックスに一致する最高のバージョンを提供します(セマンティックバージョニングルールによる))がない場合は、通常の動作を使用して、最低バージョン> =指定されたバージョンを取得します。
最新のビルドで復元を実行すると、というファイルが書き出されproject.lock.json
ます。このファイルには、で定義されているすべてのターゲットフレームワークの依存関係が推移的に閉じられます。project.json
いるます。
このようなことが失敗した場合、次のことができます。
解決された依存関係を使用して見てください kpm list
ます。これにより、プロジェクトによって参照されるパッケージの解決済みバージョンと、それがどの依存関係に引き込まれたかが表示されます。たとえば、A-> Bの場合、次のように表示されます。
あ
-> B
B
->
実際のKPMリスト出力:
ClassLibrary39の依存関係のリスト(C:\ Users \ davifowl \ Documents \ Visual Studio 14 \ Projects \ ClassLibrary39 \ src \ ClassLibrary39 \ project.json)
[Target framework DNX,Version=v4.5.1 (dnx451)]
framework/Microsoft.CSharp 4.0.0.0
-> ClassLibrary39 1.0.0
framework/mscorlib 4.0.0.0
-> ClassLibrary39 1.0.0
framework/System 4.0.0.0
-> ClassLibrary39 1.0.0
framework/System.Core 4.0.0.0
-> ClassLibrary39 1.0.0
*Newtonsoft.Json 6.0.1
-> ClassLibrary39 1.0.0
[Target framework DNXCore,Version=v5.0 (dnxcore50)]
*Newtonsoft.Json 6.0.1
-> ClassLibrary39 1.0.0
System.Runtime 4.0.20-beta-22709
-> ClassLibrary39 1.0.0
*は直接的な依存関係を意味します。
作業中のビジュアルスタジオ(現在DNXで機能しない)がある場合は、参照ノードを確認できます。同じデータが視覚的に表現されています。
依存関係の失敗の様子を見てみましょう。
これがproject.jsonです
{
"version": "1.0.0-*",
"dependencies": {
"Newtonsoft.Json": "8.0.0"
},
"frameworks" : {
"dnx451" : {
"dependencies": {
}
},
"dnxcore50" : {
"dependencies": {
"System.Runtime": "4.0.20-beta-22709"
}
}
}
}
Newtonsoft.Json 8.0.0
存在しません。したがって、kpm restoreを実行すると、次のようになります。
復元が失敗した可能性がある場合の診断では、行われたHTTP要求を調べて、kpmが調べた構成済みのパッケージソースを通知します。上の画像に注目して、CACHE
要求があります。これは、リソースのタイプ(nupkgまたはnuspec)に基づく組み込みのキャッシュであり、構成可能なTTLがあります(を参照kpm restore --help
)。kpm
リモートNuGetソースを強制的にヒットする場合は、--no-cache
フラグを使用します。
これらのエラーは、パッケージマネージャーのログ出力ウィンドウのVisual Studioにも表示されます。
サイドノート!
パッケージソース
NuGet.configの現在の動作方法について説明します(将来的に変更される可能性があります)。デフォルトでは、デフォルトでNuGet.orgソースがグローバルに構成されたNuGet.configがあります。%appdata%\NuGet\NuGet.Config
ます。Visual Studio内またはNuGetコマンドラインツールを使用して、これらのグローバルソースを管理できます。障害の診断を試みるときは、常に有効なソース(kpm出力にリストされているもの)を確認する必要があります。
NuGet.configの詳細については、こちらをご覧ください
現実に戻れ:
依存関係が解決されない場合、アプリケーションを実行すると次のようになります。
> dnx . run
System.InvalidOperationException: Failed to resolve the following dependencies for target framework 'DNX,Version=v4.5.1':
Newtonsoft.Json 8.0.0
Searched Locations:
C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\{name}\project.json
C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\test\{name}\project.json
C:\Users\davifowl\.dnx\packages\{name}\{version}\{name}.nuspec
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\{name}.dll
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\{name}.dll
C:\WINDOWS\Microsoft.NET\assembly\GAC_32\{name}\{version}\{name}.dll
C:\WINDOWS\Microsoft.NET\assembly\GAC_64\{name}\{version}\{name}.dll
C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\{name}\{version}\{name}.dll
Try running 'kpm restore'.
at Microsoft.Framework.Runtime.DefaultHost.GetEntryPoint(String applicationName)
at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)
ランタイムは基本的に、実行を試みる前に、依存関係グラフ全体が解決されていることを検証しようとします。kpm restore
リストされている依存関係を見つけることができないため、実行が提案された場合にそうなります。
このエラーが発生するもう1つの理由は、間違ったdnxフレーバーを実行している場合です。アプリケーションでdnx451のみを指定していて、CoreCLR dnxを実行しようとすると、同様の問題が発生する可能性があります。エラーメッセージのターゲットフレームワークに細心の注意を払ってください。
実行する場合:
dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}
実行しようとしているときは、clrからで定義されてproject.json
いるターゲットフレームワークへのメンタルマッピングを覚えておく必要があります。
これは、参照ノードの下のVisual Studioにも表示されます。
黄色でマークされたノードは未解決です。
これらは、エラーリストにも表示されます。
建物
これらのエラーはビルド時にも表示されます。コマンドラインからビルドする場合、出力は非常に詳細であり、問題を診断するときに非常に役立ちます。
> kpm build
Building ClassLibrary39 for DNX,Version=v4.5.1
Using Project dependency ClassLibrary39 1.0.0
Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json
Using Assembly dependency framework/mscorlib 4.0.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll
Using Assembly dependency framework/System 4.0.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll
Using Assembly dependency framework/System.Core 4.0.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll
Using Assembly dependency framework/Microsoft.CSharp 4.0.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll
Building ClassLibrary39 for DNXCore,Version=v5.0
Using Project dependency ClassLibrary39 1.0.0
Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json
Using Package dependency System.Console 4.0.0-beta-22709
Source: C:\Users\davifowl\.dnx\packages\System.Console\4.0.0-beta-22709
File: lib\contract\System.Console.dll
Using Package dependency System.IO 4.0.10-beta-22231
Source: C:\Users\davifowl\.dnx\packages\System.IO\4.0.10-beta-22231
File: lib\contract\System.IO.dll
Using Package dependency System.Runtime 4.0.20-beta-22231
Source: C:\Users\davifowl\.dnx\packages\System.Runtime\4.0.20-beta-22231
File: lib\contract\System.Runtime.dll
Using Package dependency System.Text.Encoding 4.0.10-beta-22231
Source: C:\Users\davifowl\.dnx\packages\System.Text.Encoding\4.0.10-beta-22231
File: lib\contract\System.Text.Encoding.dll
Using Package dependency System.Threading.Tasks 4.0.10-beta-22231
Source: C:\Users\davifowl\.dnx\packages\System.Threading.Tasks\4.0.10-beta-22231
File: lib\contract\System.Threading.Tasks.dll
出力には、パッケージとプロジェクト参照からコンパイラに渡されたすべてのアセンブリが表示されます。ビルドエラーが発生し始めたら、ここを参照して、使用しているパッケージがそのターゲットプラットフォームで実際に機能することを確認してください。
次に、dnxcore50で動作しないパッケージの例を示します。
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.Owin.Host.SystemWeb": "3.0.0"
},
"frameworks": {
"dnx451": {
"dependencies": {
}
},
"dnxcore50": {
"dependencies": {
"System.Console": "4.0.0-beta-22709"
}
}
}
}
Microsoft.Owin.Host.SystemWebバージョン3.0.0には、dnxcore50で実行されるアセンブリがありません(解凍されたパッケージのlibフォルダーを確認してください)。実行するとkpm build
:
「パッケージMicrosoft.Owin.Host.SystemWebを使用する」とありますが、「ファイル:」はありません。これがビルドの失敗の原因である可能性があります。
ここで私の脳のダンプを終了します