同じプロジェクトの一部である Nuget パッケージへの 2 種類の依存関係を持つ ASP.NET Core アプリケーションのビルドを自動化しようとしています。
- Nuget パッケージへの直接的な依存関係も、取り組みの一環として積極的に開発されています
- 同じソリューション内の "クラシック" .NET アセンブリ プロジェクトへの参照。これらのプロジェクトは、開発中の Nuget パッケージに依存しています。
Nuget パッケージの最新バージョンを取得し、「正しいことを行う」ために、このソリューションのビルドが必要です。
上記の #1 から始めましょう。
dnu install (非推奨) を使用すると、Nuget パッケージの最新バージョンに効果的に更新できます。ただし、これは xproj と同じディレクトリで dnu install を実行している場合のみです。なんで?package id、version、project locationの 3 つの位置引数 (ただし AFAICT には名前がありません) があるため、プロジェクトの場所を指定する場合はバージョンを入力する必要がありますが、最新のものが必要な場合は何を入力すればよいでしょうか? * を試しましたが、うまくいきませんでした。
理想的には、とにかくCoreclr dotnet クライアントを使用したいのですが、それには (設計上) インストール オプションがありません。
ケース #2 私の「クラシック」アセンブリ プロジェクトには、プロジェクトの最新のナゲットをプルして適切にビルドするnuget updateを使用するビルド前のステップがあります (これは私のケース #1 に類似しています)。
ただし、ASP.NET プロジェクトは再構築されていますが、ASP.NET Core アプリケーション内のこれらのプロジェクトへの参照が更新されているようには見えません。ソリューション エクスプローラーでは、依存するナゲットのバージョンは、参照として手動で追加したときのバージョンのままです。Visual Studio で作業している場合でも、私が見つけた唯一の修正方法は、参照を削除してから再度追加することです (「ラップ」メカニズムが自動的に作動しないかのように)。
このすべてから、このビルドを完全に自動化することは実際には不可能だと思います-私が間違っていることを願っています:)
以下の詳細を含むように改訂
以下は、すべてが正しくビルドされた時点での Visual Studio でのプロジェクト構造です。
ここにglobal.jsonがあります:
{
"projects": [
"src",
"test",
"wrap"
],
"sdk": {
"version": "1.0.0-rc1-update1"
}
}
API プロジェクトの完全な project.json は次のとおりです。
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Lnl.Saas.Diagnostics": "1.0.0-*",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.TraceSource": "1.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},
"frameworks": {
"dnx452": {
"dependencies": {
"Account.Model": "1.0.0-*",
"Account.Service": "1.0.0-*"
}
}
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
ここで、上記のソリューションで参照されている Nuget パッケージを作成するプロジェクト (表示されていません) を再構築します。
次に、上記のアカウント ソリューションを再構築して、更新された Nugets を取得できるようにしたいと考えています。
- Lnl.Saas.Diagnostics の最新バージョンを API プロジェクトに直接追加
- 他の 2 つの Nuget を Service プロジェクトに追加し (ビルド後の nuget インストールによって機能します)、API プロジェクトの Service への参照を更新して、新しい Nuget を参照するようにします。
Diagnostics Nuget の参照は変更されていないことに注意してください (サービスの参照も変更されていませんが、最初のスクリーン ショットで展開するのを忘れていました)。
Nuget パッケージ マネージャー UI を見ると、更新があることがわかり、UI を使用すると更新が適用されます。
パッケージ マネージャー コンソールでdnu restoreを実行すると、新しいパッケージが一覧表示されますが、project.lock.json で明示的に指定されている以前のパッケージが (再?) インストールされます。
ドキュメントをつなぎ合わせようとした結果、ここでdnu restoreが「正しい」ことを行っているという印象を受け、dnu installを使用する必要がありました。これは、 project.json ファイルと同じディレクトリで実行すると機能します (ただし、自動化スクリプトが存在する別のディレクトリから実行しようとすると、バージョン (2 番目) 引数に何を入力すればよいかわかりません。これは、プロジェクトの場所 (3 番目) 引数を指定しているため必要になりました) .
http://docs.asp.net/en/latest/dnxのドキュメントはひどく不足しており、いくつかのリンクをたどると、より良いドキュメントがあるdotnet.github.ioプロジェクトにたどり着きました (ただし、 rc2 に適用されます)。
最後に、おそらくこれはいくつかの追加の手がかりを提供しますが、ビルド時に次のような警告 (実行時に問題が発生するようには見えません) が表示されることです。
警告 MSB3274 プライマリ リファレンス "C:...\Account\Service\bin\Debug\Account.Service.dll" は、".NETFramework,Version=v4.5.2" フレームワークに対してビルドされているため、解決できませんでした。現在対象のフレームワーク「.NETFramework,Version=v4.5.1」より上位のバージョンです。
APIプロジェクトで4.5.1フレームワークをどこでどのようにターゲットにしているのかわからないため、解決方法がわかりません。