问题描述
我正在尝试为我的 SDK 样式的 Directory.Build.*
文件编写一个 csproj
文件。它应该注入一个通用的产品版本(来自 VERSION.txt
)并向其添加 git 哈希。
我只有关于 MSBuild 的基本知识,我知道如何查找 SDK 使用的属性以及首先在评估阶段设置的属性。我还在文档中找到了属性函数和目标定义。
对于此工作示例,csproj
文件仅包含:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
</Project>
在执行 Directory.Build.props
时,以下 dotnet build /p:VcsDesc=123
仅包含评估阶段的内容:
<Project>
<PropertyGroup>
<Version>$([System.IO.File]::ReadAllText($([MSBuild]::GetPathOfFileAbove("VERSION.txt"))))+vcs$(VcsDesc)</Version>
</PropertyGroup>
</Project>
<Target Name="Foo" Outputs="VcsDesc">
<Exec Command="git describe --always --tags --dirty" ConsoletoMSBuild="true">
<Output TaskParameter="ConsoleOutput" PropertyName="VcsDesc" />
</Exec>
<Message Importance="High" Text="VCS Descriptor = $(VcsDesc)" />
</Target>
当我在 InitialTargets="Foo"
上将其定义为 Directory.Build.props
或添加 DependsOnTargets="BeforeBuild"
时,它会被执行。我知道它会被执行,因为我看到来自 git
的正确输出的消息。但是,SDK 并未选择该属性(我发现它在生成的 NuGet 规范中缺失)。
我试过了
- 使用
Directory.Build.targets
而不是Directory.Build.props
- 在
Version
目标内设置Foo
,最终使用默认 1.0.0 版本 - 从目标中删除
Outputs
-
DependsOnTargets="Build"
而不是BeforeBuild
我认为我执行目标太早了,但我不知道在哪里可以找到合适的目标来放入 DependsOnTargets
。
欢迎任何指点。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)