gpt4 book ai didi

c# - 使用 MSBuild 4.0,如何从 MSBuild 任务传递要在 c# 项目文件中扩展的属性名称?

转载 作者:行者123 更新时间:2023-11-30 16:28:01 24 4
gpt4 key购买 nike

我为我们的 CI 流程创建了一个 MSBuild 脚本,在这个脚本中我使用了一个 MSBuild 任务来编译解决方案:

<PropertyGroup>
<MyOutPath>Output</MyOutPath>
</PropertyGroup>

<MSBuild
Projects="MySolution.sln"
Targets="Clean;Rebuild"
Properties="OutputPath=$(MyOutPath)\%24(AssemblyName)">
</MSBuild>

我希望 C# 项目文件使用像这样的输出路径

  • 项目 MyAssemblyName1 的输出\MyAssemblyName1
  • 项目 MyAssemblyName2 的输出\MyAssemblyName2

AssemblyName 属性来自 C# 项目文件,我希望在构建项目时在 OutputPath 属性中扩展它。

现在,%24(AssemblyName) 只是在文件系统上生成 Output\$(AssemblyName),这不是我想要的。

毫不奇怪,使用 $(AssemblyName) 在“父”MSBuild 文件中扩展为空。

有什么方法可以推迟目标项目文件中 AssemblyName 属性的解析?

此外,我不想修改 .csproj 文件,因为我希望 CI 系统的影响最小。

最佳答案

您可以使用 Import element.csproj 项目文件直接导入到您的 MSBuild 脚本中.这样您就可以直接引用 AssemblyName 属性:

<Import Project="MyProject.csproj" />
<Message Text="The assembly name is $(AssemblyName)" />

如果您需要导入.sln 解决方案文件的内容,首先您必须convert it to an MSBuild project file通过将 MSBuildEmitSolution 环境变量设置为 1 并在解决方案文件上运行 MSBuild。这将生成一个 MySolution.sln.proj 文件,然后您可以将其导入到您的脚本中,如前所述:

<SetEnv Name="MSBuildEmitSolution" Value="1" />
<MSBuild Projects="MySolution.sln" Targets="Build" />
<Import Project="MySolution.sln.proj" />

关于c# - 使用 MSBuild 4.0,如何从 MSBuild 任务传递要在 c# 项目文件中扩展的属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com