3

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

输出文件格式:

PropertyName1=ValueA
PropertyName2=ValueB
...

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

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

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

我找到了几种将值写入文件的方法包括其中包含一些C# 代码的子目标,但我是 MSBuild 的新手,我不确定如何将这些要求合并到一个文件Target中以使其重新-可用。

4

2 回答 2

3

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

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

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

于 2017-02-09T16:11:53.630 回答
0

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

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

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

于 2017-02-08T10:59:23.830 回答