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

C# 将属性(名称=值)写入MSBuild项目中的文件,c#,msbuild,vcxproj,C#,Msbuild,Vcxproj,对于MSBuild项目,我希望输出某种类型的.config文件,该文件将沿着生成的二进制文件重新分发,以便二进制文件的用户可以通过编程方式检查生成时使用的参数 输出文件格式: PropertyName1=ValueA PropertyName2=ValueB ... 理想情况下,要写入的属性列表将只包含它们的名称。也许像: <ItemGroup> <MyExposedDictionary Include="Configuration" /> <MyExpo

对于MSBuild项目,我希望输出某种类型的
.config
文件,该文件将沿着生成的二进制文件重新分发,以便二进制文件的用户可以通过编程方式检查生成时使用的参数

输出文件格式:

PropertyName1=ValueA
PropertyName2=ValueB
...
理想情况下,要写入的属性列表将只包含它们的名称。也许像:

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

...
使用
MyExposedDictionary
作为参数,以提供给某些
DotConfigFileWriter
任务以及目标文件的路径


我发现有一个文件,包括一个子目标和一些,但我是MSBuild的新手,我不确定如何将这些需求合并到一个
目标中以使其可重用。

我不确定您的问题在哪里。我有一个类似的要求,即文件是由刚刚编译的程序创建的。我编辑了项目的属性:在
构建事件
中输入
构建后操作

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>

...

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

生成的二进制文件不具有所有必需的值,只有生成时的MSBuild项目具有这些值,并且在此处更改生成的程序的性质是毫无疑问的。遗憾的是,写入文件很容易,但另一个问题归结为“将属性的名称指定为字符串,如何获取其值”。不幸的是,这是很难的,如果不是不可能的话;搜索例如“msbuild自定义任务获取属性”,然后阅读例如。但是,如果您愿意添加一些副本,您可以使用类似@stijn的东西(或者先用行构建一个项目组,然后将其写入文件)@stijn,这是一个很有价值的输入,谢谢