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

时间:2017-02-08 10:45:12

标签: c# msbuild vcxproj

对于MSBuild项目,我想输出某种.config文件,该文件将沿生成的二进制文件重新分配,因此编译时可以由二进制文件的用户检查构建时使用的参数。

输出文件格式:

PropertyName1=ValueA
PropertyName2=ValueB
...

理想情况下,要写入的属性列表只包含其名称。也许像:

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

使用MyExposedDictionary作为赋予某些DotConfigFileWriter任务的参数,以及目标文件的路径。

我找到several wayswrite down values的文件,包括一个C# code in it的子目标,但我是MSBuild的新手,我不确定我如何将这些要求合并为一个Target以使其可重复使用。

2 个答案:

答案 0 :(得分:0)

我不确定您的问题所在。我有一个类似的要求,即刚编译的程序创建一个文件。我编辑了项目的属性:在build events输入Post-build action之类的

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

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

答案 1 :(得分:0)

如果有人来到这里有相同的要求,这就是我最终的结果。对结果并不满意,因为我希望有一些更通用的东西,但至少它能完成这项工作,并在我的项目中融合得很好:

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

如果有人碰巧有更优雅的解决方案,请跳进去!