tl;dr
template.json
にpostActions
とprimaryOutputs
の項目を追加することで、カスタムテンプレートがdotnet restore
を自動実行するよう設定できる。
環境
$ dotnet --version
2.1.402
$ nuget help
NuGet Version: 4.8.1.5435
背景
dotnet-template-samples/16-nuget-packageをそのままnuget pack
, dotnet new -i
, dotnet new garciaconsole
して使ってみると、VSCodeでは次の内容のポップアップダイアログが立ち上がります。またコードには赤線が引かれ、IntelliSenseも効かない状態なってしまいます。
There are unresolved dependencies'. Please execute the restore command to continue.
ここでRestore
ボタンを押すか、dotnet restore
を実行すると適切なファイルが生成され、正常な状態に戻ります。
(暗黙的dotnet restoreなるものがあるらしいけど、これがうまく働かない理由は未調査)
Restoreの自動実行
既存のconsole
テンプレートの出力を見ると、確かにdotnet restore
が実行されているようです。そこでdotnet restore
を自動実行させるため、今度はdotnet-template-samples/08-restore-on-createを参考にして以下の内容をtemplate.json
に追加してみます。
"postActions": [
{
"manualInstructions": [
{
"text": "Run 'dotnet restore'"
}
],
"actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025",
"continueOnError": true
}
]
しかし、このテンプレートを使ってもやはりrestore
が上手くいきません。次のようなメッセージが表示されるでしょう。
作成後のアクションを処理しています...
復元するプライマリ出力がありません。
csprojの指定
実はrestore
するためには*projファイルを指定してやる必要があります。そこで次の内容をtemplate.json
に追加します。
"primaryOutputs": [
{
"path": "content.csproj"
}
]
これによりdotnet restore
が正しく実行されるようになります。
参考リンク
dotnet new のカスタム テンプレート | Microsoft Docs
Post Action Registry · dotnet/templating Wiki
Restore fails with "No Primary Outputs to restore" · Issue #1324 · dotnet/templating