0

CreateLocalPackages使用 Visual Studio 2017 中的新 CSProj 格式,我编写了一个目标文件来处理一个名为该文件夹中任何解决方案包的最高编号。

我的解决方案有几个项目,每个项目都构建一个 NuGet 包,其中一些项目依赖于解决方案中的其他项目。

例如,使用本地包目录中的这些文件:

BaseLibrary.2.1.0.1-betalocal.nupkg
BaseLibrary.2.1.0.1-betalocal.symbols.nupkg
BaseLibrary.Specialized.2.1.0.1-betalocal.nupkg
BaseLibrary.Specialized.2.1.0.1-betalocal.symbols.nupkg

下次CreateLocalPackages配置干净构建时,它将选择创建这些包:

BaseLibrary.2.1.0.2-betalocal.nupkg
BaseLibrary.2.1.0.2-betalocal.symbols.nupkg
BaseLibrary.Specialized.2.1.0.2-betalocal.nupkg
BaseLibrary.Specialized.2.1.0.2-betalocal.symbols.nupkg

我已经很好地工作了,除了 Visual Studio 似乎BaseLibrary\BaseLibrary.Specialized\obj\project.assets.json在我可以挂接到 MSBuild 目标并将 $(Version) 更改为 之前创建文件2.1.0.2,导致BaseLibrary.Specialized.2.1.0.2-betalocal.nupkg只引用此依赖项:BaseLibrary.2.1.0-betalocal. Visual Studio 似乎project.assets.json在调用 MSBuild 构建项目之前执行的 NuGet 还原步骤期间生成。

我已经尝试运行我的版本号逻辑BeforeTargets="CollectPackageReferences;_ComputeTargetFrameworkItems"以便在Restore目标链的早期被调用,但它似乎不像 Visual Studio 调用MSBuild /t:Restore来恢复 NuGet 包引用(并生成project.assets.json)。我不知道它是否有自己的逻辑,或者它是否调用了另一个工具。

我希望能够告诉 VS 重建并让它找出新版本,构建和打包所有内容,并列出正确的依赖版本。

4

1 回答 1

1

如何为 projectReference 设置特定于构建的版本号,以便 NuGet 包依赖项列出正确的版本

如果我理解你是正确的,你想CreateLocalPackages在 VS/MSBuild 目标之前调用版本号逻辑Restore目标。

您可以添加一个在目标还原之前运行的 MSBuild 目标,或者_GenerateRestoreProjectSpec在您的 MSBuild .*csproj 文件中添加以下代码片段:

  <Target Name="VersionNumberLogicBeforeRestore"
          BeforeTargets="Restore">
    <Message Text="Version Number Logic Before Restore!" Importance="high" />
  </Target>

或者

  <Target Name="VersionNumberLogicBeforeRestore"
          BeforeTargets="_GenerateRestoreProjectSpec">
    <Message Text="Version Number Logic Before Restore!" Importance="high" />
  </Target>

但是,这仅适用于 dotnet cli,不适用于 Visual Studio。

dotnet restore "xx.csproj"

此外,NuGet 恢复更改将成为 15.4 的一部分,如果它仍然存在的话。否则 15.5。

有关详细信息,请参阅添加对 Visual Studio 触发的预还原 MSBuild 目标的支持

所以,此时,我们必须使用 dotnet cli 调用 target 之前的版本号逻辑目标Restore,也可以使用 dotnet cli 构建项目。

于 2017-11-01T06:48:10.683 回答