的MSBuild 15.1/4的NuGet不恢复我试图通过命令行运行的MSBuild包

的MSBuild 15.1/4的NuGet不恢复我试图通过命令行运行的MSBuild包

问题描述:

,并不能得到的NuGet包使用还原/ T:作为记录here.恢复开关。该解决方案是一个相当简单的ASP.NET MVC应用程序和MSTest项目。如果我在本地开发文件夹或构建服务器上运行恢复标志,我看不到要恢复的NuGet包,即使我删除了包,obj和bin文件夹。的MSBuild 15.1/4的NuGet不恢复我试图通过命令行运行的MSBuild包

我已经启用自动下载的文件here。如果我使用Studio打开该项目并构建它,则会按预期恢复包。这仅在使用MSBuild时失败。

这一切正在与Visual Studio 2017年最新的补丁级别进行。生成机器有Professional,我的机器有Enterprise。两者都有相同的行为。

有没有人得到的MSBuild使用的MSBuild 15.1挽回的NuGet包?

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恢复'仍然是非.NET核心项目的选项。 –

+0

它是一个传统的基于CSPROJ的项目。你是说Nuget.exe是选项还是AN选项? http://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html –

+1

我发现,通过改变的csproj使用PackageReference语法代替参考(如在我以前的链接注意评论),事情工作。看起来这是MVC Web App CSPROJ模板的问题,而不是MSBuild。 –

确认我上面的评论是(痛苦但有效的)修复。

我曾在一个文本编辑器,破解打开的csproj并更换所有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的工作。这就是为什么我怀疑MVC应用程序项目类型模板而不是MSBuild或NuGet的问题。

+0

如果这样做会自动完成会不会很好?例如。你改变选项中的设置,然后打开一个项目,并提供自动更改为新的格式....哦! :-) – Manfred

+0

我似乎记得过去做过这样的IDE。已经有几年了。是的,这很不错。 :) –

+0

一个善良的用户用ps脚本创建了一个要点来达到这个目的。为我工作。确保你的packages.config被备份或者事先在vc中,当脚本删除它时。 https://gist.github.com/a4099181/074a6c3dd524ea0d343382137492399c – murraybiscuit