当操作来自 NuGet 包时,如何在多目标项目上操作 Packageversion

How can I manipulate the Packageversion on a multi target project when manipulation comes from a NuGet package

我有一个带有目标文件的 NuGet 包,它根据当前上下文操作 PackageVersion(当分支是主分支时,它会创建预览)。

这在普通项目上运行良好,但当我在多目标项目中使用它时,它不起作用。

我该如何纠正?

我附上了一个示例项目。 https://1drv.ms/u/s!At1IZ7t_aXW-iNRchOhliGP8dunGHg?e=11dW4F 要重现问题:

  1. 解压所有文件
  2. 您需要本地 NuGet 源
  3. 在 BuildConfig/publish.bat
  4. 中输入本地 NuGet 源的名称
  5. 在BuildConfig
  6. 中调用publish.bat
  7. 运行 消费者中的“dotnet pack”

这将创建一个版本为 1.0.0 的消费者程序包。这应该是 1.0.0-xdev.

当您更改 Consumer.csproj 以便使用 TargetFramework 时,会创建正确的版本

我已经尝试在目标之外进行版本修改,但是当在 Directory.Build.Targets 文件中指定版本号时,这会导致问题

我尝试了不同的 BeforeTargets,但没有任何效果。

你使用multi-targetframeworks属性喜欢<TargetFrameworks>net461</TargetFrameworks>,build的文件夹nuget 包不能很好地运行,它不能为多目标框架服务,只能为单一目标框架服务。

而不是,你应该放弃build并使用buildCrossTargeting

BuildConfig项目下,如果是新的sdk项目,请使用这个

<ItemGroup>
<None Include="BuildConfig.targets" Pack="true" PackagePath="buildCrossTargeting" />"
</ItemGroup>

如果你使用 nuspec 文件,你应该在文件下使用这个:

<file src="BuildConfig.targets" target="buildCrossTargeting/" />

你应该注意 xxx.targets 文件应该直接在 buildCrossTargeting 文件夹下,没有任何子文件夹,否则将无法工作。