使用CCNetLabel使用CruiseControl.NET设置AssemblyVersion和PublishVersion

时间:2009-10-28 16:32:33

标签: msbuild clickonce cruisecontrol.net

我正在尝试使用CruiseControl.NET部署Click Once应用程序(构建和发布)。我无法找到可以使用CCNetLabel设置AssemblyVersion和/或PublishVersion的位置。我会接受其他解决方案,允许每个CruiseControl.NET部署(实时和开发部署)的唯一版本号。

3 个答案:

答案 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”)]