【问题标题】:MSBuild not updating NuGet references when building with PackageVersion Property使用 PackageVersion 属性构建时,MSBuild 不更新 NuGet 引用
【发布时间】:2018-01-12 15:46:47
【问题描述】:

我在同一个解决方案(A 和 B)中构建了两个 .NetStandard NuGet 包

A 有一个对 B 的项目引用。

默认情况下,当我在 VS 中构建时,它会为两个项目创建一个 NuGet 包。

A.1.0.0.nupkg会包含这个依赖,这个依赖是msbuild自动添加的:

<dependency id="B" version="1.0.0" exclude="Build,Analyzers" />

这很好用,而且它的自动功能很棒。

如果我将 B 的 Package Version 更改为 2.0.0 并构建,A.nuspec 中的行将自动更新为:

<dependency id="B" version="2.0.0" exclude="Build,Analyzers" />

这太棒了,它就像魔术一样工作。

问题是,如果我使用 PackageVersion 属性构建,这 not 工作:

msbuild /p:PackageVersion="3.0.0"

我希望 msbuild 会创建两个 nupkg:

  • A.3.0.0.nupkg
  • B.3.0.0.nupkg

确实如此。但是,A.nuspec 仍然有这种依赖关系:

<dependency id="B" version="2.0.0" exclude="Build,Analyzers" />

我希望它是version="3.0.0"

是否有任何解决方法?我应该以不同的方式配置我的包吗?

【问题讨论】:

    标签: c# msbuild nuget visual-studio-2017 .net-standard


    【解决方案1】:

    目前(NuGet 4.5.0),版本在还原操作期间被锁定,而不是在包构建期间。

    这将在 NuGet 4.6.0(包含在 VS 15.6 中)中进行更改。

    要解决此问题,请改用msbuild /restore /p:PackageVersion=3.0.0

    更多详情请见this GitHub issue

    【讨论】:

    • 我假设这将在构建项目的常规 msbuild 命令之前运行?我拥有的msbuild 版本没有/restore 标志。你是哪个版本的?
    • 15.5 引入了/restore 标志,这是在同一调用中运行Restore 和其他目标并将参数传递给两者的安全方式
    • 刚刚更新了VS,这似乎运作良好。对于将来阅读的任何人,我只需将/restore 标志添加到我的msbuild 调用中。我用 VS/MSBuild 15.5.3 测试过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多