3

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带来 Name 不能以 开头的错误$

编辑:我已经尝试了 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>
4

1 回答 1

1
  1. Encoding错了,应该是UTF-8
  2. 使用项目/属性时,and%必须在 之前,中间没有空格:@$(%(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 时才有效,否则路径(文档/foo)将是错误的。这可以通过使用例如修复$(MsBuildThisFileDirectory)\bin\foo.exe

于 2013-07-17T09:07:09.713 回答