将属性(名称=值)从 MSBuild 项目写入文件

Write Properties (name=value) to a file from an MSBuild project

对于 MSBuild 项目,我想输出某种 .config 文件,该文件将与生成的二进制文件一起重新分发,以便二进制用户可以检查构建时使用的参数,以编程方式。

输出文件格式:

PropertyName1=ValueA
PropertyName2=ValueB
...

理想情况下,要写入的属性列表只包含它们的名称。也许喜欢:

<ItemGroup>
  <MyExposedDictionary Include="Configuration" />
  <MyExposedDictionary Include="Platform" />
  <MyExposedDictionary Include="PropertyName1" />
  ...
</ItemGroup>

MyExposedDictionary 是给某些 DotConfigFileWriter 任务的参数,也是目标文件的路径。

我找到了 several ways to write down values to a file, including a sub-target with some C# code in it,但我是 MSBuild 的新手,我不确定如何将这些要求合并到一个 Target 中以使其可重复使用。

我不确定你的问题出在哪里。我有一个类似的要求,即一个文件是由刚刚编译的程序创建的。我编辑了项目的属性:在build events中输入一个Post-build action like

REM create special file
"$(ProjectDir)$(OutDir)MyProgram.exe" /WriteFile MyFile.xml

当然,您还必须更改您的程序,使其在使用该参数调用时执行正确的操作(并在完成该操作后停止 - 不显示 GUI 或作为 Windows 服务启动).

如果有人带着同样的要求来到这里,这就是我最后得到的。对结果不是很满意,因为我希望得到更通用的东西,但至少它完成了工作并很好地融入了我的项目:

<Target Name="WriteBuildProperties" BeforeTargets="PreBuildEvent">
  <WriteLinesToFile File="$(DotConfigFile)" Overwrite="true" Lines="" />
  <WriteLinesToFile File="$(DotConfigFile)" Lines="ProjectName=$(ProjectName)" />
  <WriteLinesToFile File="$(DotConfigFile)" Lines="Configuration=$(Configuration)" />
  ...
</Target>

如果有人碰巧有更优雅的解决方案,请加入!