【问题标题】:Visual Studio 2010 Setup to automatically change .NET project assembly versions from SVN versionsVisual Studio 2010 安装程序自动从 SVN 版本更改 .NET 项目程序集版本
【发布时间】:2012-03-14 03:53:04
【问题描述】:

如何专门设置 Visual Studio 2010,以便在编译(或构建/重建项目/解决方案)期间自动更改 .NET 项目的程序集版本,而无需手动更改它们。如果他们在同一个解决方案中有一个 Web 应用程序和多个类库项目,请具体说明典型的公司/组织将如何执行此操作。假设我们使用 Tortoise SVN 进行版本控制,并且我们希望我们的项目版本能够自动反映 SVN 版本。

【问题讨论】:

  • 合并而不是关闭不是更好吗?我在元网站的某个地方读到过。
  • 1.所有完整的答案都已经写在提到的问题中。 2.我没有合并的权力
  • 合并只能由版主完成,99%的情况下是没有意义的。

标签: .net visual-studio-2010 version-control tortoisesvn assemblyversions


【解决方案1】:

我不知道有什么方法可以通过 Visual Studio 做到这一点。

贵组织有构建脚本吗? 我在 Powershell 中维护了一个 buildscript,从这里问题是完全可以解决的。

这里有一些示例 sn-ps:

提取颠覆修订号:

$revisionNumber = (svn info $RepositoryPath -r HEAD | select-string '^Revision: (\d+)$').Matches[0].Groups[1].Value

然后,将此版本号分配给解决方案中的每个程序集:

$targetAssemblyVersion="1.0.3.{0}" -f $revisionNumber
$assemblyDeclaration = "[assembly: AssemblyFileVersion(`"{0}`")]" -f $targetAssemblyVersion;
get-childitem -recurse -filter "AssemblyInfo.cs" |
   % {
          $sb = new-object System.Text.StringBuilder;
          $_ | get-content |
           % {
                 $replacedString = ($_ -replace '^\[assembly: AssemblyFileVersion\("[\d\.]+"\)\]',$assemblyDeclaration);
                  $dummy = ($sb.AppendLine($replacedString));
            };
          $sb.ToString() | out-file $_.FullName;
    };

【讨论】:

  • 我们使用 Cruise Control 进行持续集成。我认为它只是调用 msbuild(标准 .NET 编译/构建命令)。但我确实知道,每次代码提交给 SVN 时,Cruise Control 都会启动另一个构建,因此我们可以完全按照您在构建期间所做的工作。那么修订号是版本中的第 4 个数字吗?前 3 个数字是什么意思?
  • 我只是随意选择了前三个数字。对于版本编号,较高的有效数字往往基于营销决策而不是技术决策。
  • 我看到 www.codeplex.com 使用第一个版本的年份,然后第二个和第三个基于最后一个小版本的月份和日期(我认为),并且最后一部分必须是来自 Team Foundation(或版本控制工具)的修订。
  • 我担心 Visual Studio 中的程序集版本字符串...它只允许 16 位数字(最大 = 65535),这意味着我们不能真正使用 Tortoise SVN 修订号这是因为数字会变得太大。
猜你喜欢
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多