【发布时间】:2021-09-27 10:28:32
【问题描述】:
在本地/CI 服务器构建 C# 项目时,我想控制 .csproj 文件中的 NuGet 包引用。如果开发人员在 github master 分支(本地/CI 服务器)上构建 C# 项目,我想添加 RC 构建 NuGet 包参考,否则 PRE 发布 NuGet 包参考。这个怎么做?有人可以帮助我吗?
一些想法,比如 -
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<GitBranch>$(GitBranch.Trim())</GitBranch>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GitInfo" Version="2.2.0" />
</ItemGroup>
<Choose>
<When Condition="$(GitBranch) == 'master'">
<ItemGroup>
<PackageReference Include="Data.Account.Domain.Messaging" Version="1.0.0-rc*" IncludePrerelease="true" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="Data.Account.Domain.Messaging" Version="1.0.0-pre*" IncludePrerelease="true" />
</ItemGroup>
</Otherwise>
</Choose>
</Project>
【问题讨论】:
-
IMO 您在本地构建的内容和在 CI 服务器上构建的内容应该 1:1 完全相同。想象一下,如果 PRE 包引入了 RC 不支持的新功能,那么您最多会得到不同的行为,最坏的情况是编译错误
-
是的,我同意。但是如何控制 NuGet 包引用?你能说说你的想法吗?
-
不完全确定你在问什么,但是:你的意思是有一个预构建目标,它使用
Exec任务调用git branch然后将其存储到 GitBranch 属性中,然后习惯于选择参考?只要在解决引用之前调用它就应该可以工作,但可能会弄乱 Visual Studio 显示引用的方式。 -
@stijn,我只是在想,是否可以直接在 .csproj 文件中填充 GitBranch 属性,而不是使用预构建事件?如果是,那怎么办?
标签: c# visual-studio msbuild csproj