将属性(名称=值)从 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>
如果有人碰巧有更优雅的解决方案,请加入!
对于 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>
如果有人碰巧有更优雅的解决方案,请加入!