MSBuild 15 NuGet恢复和构建

34
我正在尝试使用新的MSBuild NuGet还原功能,并遇到了一个奇怪的问题。
如果我执行以下操作:
msbuild.exe mySolution.sln /p:Configuration=Release

我收到了有关缺少软件包的错误。这是预期的行为。 但是,如果我执行以下操作:
msbuild.exe mySolution.sln /p:Configuration=Release /t:restore

MSBuild“成功”了,但只创建了一个与NuGet恢复相关的obj文件夹,即没有bin\Release\文件夹。

为了还原构建,我必须发出上述两个命令(首先是还原)。

我已经升级了所有的packages.config文件,以使用.csproj文件中最新的PackageReference。

有没有一种方法可以使用单个命令同时还原和构建?

1个回答

54

MSBuild 15.5将引入一个/restore标志,实现此功能。

在此之前,理论上可以在同一调用中运行还原和构建(/t:Restore;Build),但这是不安全的,因为MSBuild可能会缓存项目文件,并且不会看到NuGet还原所做的更改。 /restore选项将在恢复正常构建之前清除所有受影响的缓存。


如果你的 nuget.exe 本身是旧版本,它将无法“看到”已安装 MS Build 15,并将回退到版本14作为默认版本。 - danekan
10
msbuild.exe /t:Restore 不起作用,它会显示没有要还原的包。如果在 Visual Studio 中打开同样的解决方案,在解决方案上右键点击然后选择还原包,它会将它们全部还原。为什么这些工具文档如此之差? - Triynko
4
仅限于使用PackageReference的项目才可使用此功能,而传统的packages.config项目则不支持。 - Martin Ullrich
只是想澄清一下 - 执行还原和构建,请运行 msbuild project.sln /restore - Shpand
1
@JeroenvanLangen 当你使用太旧的msbuild版本,例如.NET Framework中的版本时会出现这种情况。使用Visual Studio 2019+开发者命令提示符获取更为当前的msbuild版本。 - Martin Ullrich
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接