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>
答案 0 :(得分:1)
Encoding
错了,应该是UTF-8
%
和@
以及$
必须位于(
之前,两者之间没有间距:%(MyAssemblyIdentitiesAssemblyInfo.Version)
< / LI>
MyAssemblyIdentitiesAssemblyInfo
不存在,您可能需要MyAssemblyIdentities
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
)