2017-06-22 4 views
1

MSBuildをコマンドライン経由で実行しようとしていますが、/ t:restoreスイッチを使用してNuGetパッケージを復元することはできません(文書番号here.)。このソリューションは、かなり単純なASP.NET MVCアプリケーションとMSTestプロジェクトです。ローカルのdevフォルダーまたはビルドサーバーから復元フラグを実行すると、パッケージ、obj、およびbinフォルダーを削除しても復元されるNuGetパッケージはありません。MSBuild 15.1/NuGet 4はパッケージを復元しません。

hereと記載されているように自動ダウンロードを有効にしました。 Studioでプロジェクトを開いてビルドすると、パッケージは期待どおりに復元されます。これは、MSBuildが使用されている場合にのみ失敗します。

これはすべて最新のパッチレベルでVisual Studio 2017で行われています。ビルドマシンにはProfessional、私のマシンにはEnterpriseがあります。両方とも同じ動作をします。

MSBuild 15.1を使用してNuGetパッケージを復元するMSBuildは誰ですか?

C:\Users\me\Documents\Visual Studio 2017\Projects\cmbs-admin>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" /t:Restore 
Microsoft (R) Build Engine version 15.1.1012.6693 
Copyright (C) Microsoft Corporation. All rights reserved. 

Building the projects in this solution one at a time. To enable parallel build, please add the "/m"switch. 
Build started 6/22/2017 2:01:57 PM. 
Project "C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject.sln" on node 
1 (Restore target(s)). 
ValidateSolutionConfiguration: 
    Building solution configuration "Debug|Any CPU". 
Restore: 
    Restoring packages for C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject.Tests\MyProject.Tests.csproj... 
    Restoring packages for C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject\MyProject.csproj... 
    Committing restore... 
    Committing restore... 
    Lock file has not changed. Skipping lock file write. Path: C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject\obj\project.assets.json 
    Lock file has not changed. Skipping lock file write. Path: C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject.Tests\obj\project.assets.json 
    Restore completed in 350.01 ms for C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject\MyProject.csproj. 
    Restore completed in 349.87 ms for C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject.Tests\MyProject.Tests.csproj. 

    NuGet Config files used: 
     C:\Users\me\AppData\Roaming\NuGet\NuGet.Config 
     C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config 

    Feeds used: 
     https://api.nuget.org/v3/index.json 
     C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\ 
Done Building Project "C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject\MyProject.sln" (Restore target(s)). 


Build succeeded. 
    0 Warning(s) 
    0 Error(s) 

Time Elapsed 00:00:01.18 

C:\Users\me\Documents\Visual Studio 2017\Projects\MyProject> 
+0

どのようなプロジェクトを復元しようとしていますか? 'NuGet.exe restore'は、非.NETコアプロジェクトのオプションです。 –

+0

伝統的なCSPROJベースのプロジェクトです。あなたはNuget.exeがオプションかANオプションであると言っていますか? http://blog.nuget.org/20170316/NuGet-nowfullyfullyintegrated-into-MSBuild.html –

+1

参照の代わりにPackageReference構文を使用するようにCSPROJを変更すると、これがわかりました(前回のリンクに記載されています)。コメント)を実行することができます。これはMVB Web App CSPROJテンプレートの問題であり、MSBuildでは問題ではないようです。 –

答えて

0

(痛いほど有効な)修正として上記の私のコメントを確認しました。

CSPROJをテキストエディタで開いて、すべてのReference要素をPackageReference要素に置き換える必要がありました。例えば

<Reference Include="WebGrease"> 
    <Private>True</Private> 
    <HintPath>..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath> 
</Reference> 

は次のようになります。

<PackageReference Include="WebGrease"> 
    <Version>1.6.0</Version> 
</PackageReference> 

すべての将来のNuGetはPackageReference構文を尊重し、MSBuildのとよく仕事を思え追加されます。このため、私はMSBuildやNuGetではなく、MVCアプリのプロジェクトタイプテンプレートの問題を疑うのです。

+0

それが自動的に行われるのは素晴らしいことではないでしょうか?例えば。オプションで設定を変更してからプロジェクトを開くと、新しい形式に自動的に変更するように提案されています....ああ! :-) – Manfred

+0

私は過去にそうしたIDEを覚えているようです。その数年が経ちました。うん、それはかなりいいよ。 :) –

+0

ある種のghユーザーが、この目的のためにpsスクリプトを使って要点を作成しました。私のために働いた。スクリプトがそれを削除するときに、packages.configがバックアップされているか、あらかじめvcに入っていることを確認してください。 https://gist.github.com/a4099181/074a6c3dd524ea0d343382137492399c – murraybiscuit

関連する問題