version-control - 如何使用 MSBuild 将 AssemblyVersion 写入文件?

标签 version-control msbuild doxygen

FinalEdit:尽管相对目录在第一篇文章中不起作用,但如果我简单地删除 $(MsBuildThisFileDirectory) 它就起作用了来自 Exec线。

Edit2:我将新目标添加到 DefaultTargets .现在默认运行它们。但是,现在使用 postbuild 命令计时已经结束。我添加了 <Exec Command="call $(MsBuildThisFileDirectory)documentation\tools\GenerateDocumentation.bat" IgnoreExitCode="false" />到目标,但它给出了一个错误 C:\Users\my不是有效的批处理文件,因为空间实际上是 C:\Users\my program\documentation\tools\GenerateDocumentation.bat .在路径周围加上引号会给我错误 MSB4025该名称不能以 $ 开头.

编辑:我已经尝试过 stijn 的代码,当我使用/t:RetrieveIdentities 从命令行显式运行它时,它可以正常工作,但出于某种原因,它似乎无法以其他方式运行。

我一直在使用 Doxygen 为我的源代码生成文档,但是,我希望能够自动完成。我写了一个简单的 .bat使用我想要的配置文件运行 Doxygen 并将输出编译为 .chm 的脚本帮助文件,但我无法在 Doxygen 中自动更改修订号。

我试图通过使用 MSBuild 向配置文件中添加新的一行并使用新的修订号来简单地更新配置文件,但是我一直无法打印任何内容,甚至在没有任何文件时创建新文件。

到目前为止,我的代码是从其他类似问题中获得的,但我似乎无法让它工作。

<ItemGroup>
  <MyTextFile Include="\documentation\DoxygenConfigFile.doxyconfig"/>
  <MyItems Include="PROJECT_NUMBER         = %(MyAssemblyIdentitiesAssemblyInfo.Version)"/>
</ItemGroup>
<Target Name="RetrieveIdentities">
  <GetAssemblyIdentity AssemblyFiles="bin\foo.exe">
    <Output TaskParameter="Assemblies" ItemName="MyAssemblyIdentities"/>
  </GetAssemblyIdentity>
  <WriteLinesToFile File="@(MyTextFile)" Lines="@(MyItems)" Overwrite="false" Encoding="UTF8" />
</Target>

最佳答案

  1. 编码错误,应该是UTF-8
  2. 在处理项目/属性时,%@$ 必须位于 ( , 中间没有空格:%(MyAssemblyIdentitiesAssemblyInfo.Version)
  3. MyAssemblyIdentitiesAssemblyInfo 不存在,您可能是说 MyAssemblyIdentities
  4. 了解 msbuild 如何评估属性和项目。基本上它会在你的脚本中做的是评估 MyItems,但那时 MyAssemblyIdentities 还不存在所以是空的,只有在 GetAssemblyIdentity 被执行。通过执行正确的评估顺序来解决此问题:将您的项目放入目标中并使其依赖于另一个创建 MyAssemblyIdentities 的目标,然后再评估您的项目。

总结:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="GetAssemblyIdentities">
  <GetAssemblyIdentity AssemblyFiles="bin\foo.exe">
    <Output TaskParameter="Assemblies" ItemName="MyAssemblyIdentities"/>
  </GetAssemblyIdentity>
</Target>

<Target Name="RetrieveIdentities" DependsOnTargets="GetAssemblyIdentities">
  <ItemGroup>
    <MyTextFile Include="\documentation\DoxygenConfigFile.doxyconfig"/>
    <MyItems Include="PROJECT_NUMBER = %(MyAssemblyIdentities.Version)"/>
  </ItemGroup>
  <WriteLinesToFile File="@(MyTextFile)" Lines="@(MyItems)"
                    Overwrite="false" Encoding="UTF-8" />
</Target>

</Project>

请注意,这仅在您在脚本所在的目录中调用 msbuild 时才有效,否则路径 (documentation/foo) 将是错误的。这可以通过使用例如 $(MsBuildThisFileDirectory)\bin\foo.exe)

来解决

关于version-control - 如何使用 MSBuild 将 AssemblyVersion 写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688009/

相关文章:

android - 更新时清除应用程序数据

svn - msbuild 社区任务和 Svn 提交

.net-4.0 - 使用 .net 4.5 在构建服务器上编译 .net 4.0 项目

c# - 类文档建议

iphone - 无法通过我的 xcode 运行 doxygen 脚本?

php - 是否有开箱即用的 PHP 解决方案来对数据库字段进行修订控制?

version-control - 在 CVS 中移动文件而不重置修订号

linux - SVN 就地导入和结帐

msbuild - Visual Studio 2017 - 构建后退出,代码为 9009

c++ - Doxygen 重复带有默认参数的 C++ 函数