我正在尝试使用CruiseControl.NET部署Click Once应用程序(构建和发布)。我无法找到可以使用CCNetLabel设置AssemblyVersion和/或PublishVersion的位置。我会接受其他解决方案,允许每个CruiseControl.NET部署(实时和开发部署)的唯一版本号。
答案 0 :(得分:1)
您需要编写一个脚本来设置AssemblyVersion。我建议使用NAnt或MSBuild,但PowerShell或简单的bat文件也可以。
在您的CCNET配置中,您使用Assembly Version Labeller。然后通过${CCNetLabel}
(NAnt)resp在脚本内部提供CCNetLabel。环境变量%CCNetLabel%
(批量 - 尝试不同的外壳,因为我知道它们有问题)。
该脚本的任务是编辑项目的AssemblyInfo.cs文件或创建CommonAssemblyInfo.cs文件并从项目中引用它以进行构建。
搜索
[cruisecontrol.net] assemblyinfo
提供更有价值的建议。
答案 1 :(得分:1)
你需要在AssemblyInfo.cs中的编译之前设置它,正如另一个应答者指出的那样。装配版Labeller很棒,但它不适用于svn。如果您使用svn,您可能需要查看svn revision labeller。
正确生成标签后,可以在创建/编辑AssemblyInfo.cs文件时在CC或Nant脚本中使用该标签。如果您正在使用Nant,那么asminfo任务将对您有很大帮助。 SO搜索会很好,但您可能还想查看this article,这应该会非常有用。
答案 2 :(得分:0)
您可以使用Nant C#snipped describe here
来实现此目的创建一个名为$ {assemblyinfo.file}的属性,该属性指向项目中的AssemblyInfo.cs文件。
<!-- Updating assembly version with the CI build http://lazyloading.blogspot.com/2007/05/updating-assembly-version-with-ci.html -->
<target name="update.assembly" description="Replaces the version in the assemblyinfo.cs file">
<echo message="AssemblyInfo: ${assemblyinfo.file}" />
<echo message="Version: ${CCNetLabel}" />
<script language="C#">
<references>
<include name="System.dll" />
</references>
<imports>
<import namespace="System.Text.RegularExpressions" />
</imports>
<code>
<![CDATA[
public static void ScriptMain(Project project)
{
string fileContent="";
using (StreamReader reader = new StreamReader(project.Properties["assemblyinfo.file"]))
{
fileContent = reader.ReadToEnd();
reader.Close();
}
string newVersion = string.Format("[assembly: AssemblyVersion(\"{0}\")]", project.Properties["CCNetLabel"]);
string newText = Regex.Replace(fileContent, @"\[assembly: AssemblyVersion\("".*""\)\]", newVersion);
using (StreamWriter writer = new StreamWriter(project.Properties["assemblyinfo.file"], false))
{
writer.Write(newText);
writer.Close();
}
}
]]>
</code>
</script>
</target>
示例:
[assembly:AssemblyVersion(“1.0。*”)]
变为
[assembly:AssemblyVersion(“2013.03.11.001”)]