我正在CruiseControl.Net构建服务器上构建一个C应用程序.
构建本身由msbuild完成,通过cruisecontrol.net我可以获得所需的版本 – 但我无法将其标记为c输出.
下面是我的msbuild项目文件.
任何意见表示赞赏,
丹麦安德斯
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="FullBuild" ToolsVersion="3.5">
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<UsingTask TaskName="NCover.MSBuildTasks.NCover" AssemblyFile="C:\Program Files\NCover\Build Task Plugins\NCover.MSBuildTasks.dll"/>
<UsingTask TaskName="NCover.MSBuildTasks.NCoverReporting" AssemblyFile="C:\Program Files\NCover\Build Task Plugins\NCover.MSBuildTasks.dll"/>
<ItemGroup>
<MyBinaries Include="Build\*.*"/>
</ItemGroup>
<PropertyGroup>
<CCNetLabel Condition="$(CCNetLabel)==''">2.0.0.0</CCNetLabel>
</PropertyGroup>
<ItemGroup>
<Projects Include="$(vsproject)" />
</ItemGroup>
<Target Name="Rebuild">
<MSBuild Projects="@(Projects)" StopOnFirstFailure="true" ContinueOnError="false" Targets="Rebuild" Properties="version=$(CCNetLabel)" />
</Target>
</Project>
解决方法:
在您的buildscript中,创建一个如下所示的文件(version.info):
#define BINVERSION 1,2,3,4
#define STRVERSION "1.2.3.4"
您可能需要创建一个小实用程序来执行此操作.
在您的资源文件中,您将拥有一个版本信息资源,开头将如下所示:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,2,3,4
PRODUCTVERSION 1,2,3,4
(...)
VALUE "FileVersion", "1.2.3.4"
VALUE "ProductVersion", "1.2.3.4"
用以下内容替换:
VS_VERSION_INFO VERSIONINFO
FILEVERSION BINVERSION
PRODUCTVERSION BINVERSION
(...)
VALUE "FileVersion", STRVERSION
VALUE "ProductVersion", STRVERSION
不要忘记在资源文件的顶部添加#include“version.info”
现在编译应用程序时,它将具有正确的版本号. (如果您正确创建了version.info).
另外看看Automatic Build Versioning in Visual Studio (codeproject)