10

関連する一連のプロジェクト用にCruiseControl.netをセットアップしました。その結果、CruiseControl の 1 つのプロジェクト タグに複数の SVN チェックアウトがあり、一連の msbuild タスクがすべての個々の sln ファイルをコンパイルします。

このビルドが完了したら、すべてのソリューションのアセンブリ バージョンを更新する必要があります。ただし、nant も MSBuild proj ファイルも使用していないため、これを取得する方法がわかりません。

明らかな何かが欠けているのだろうか。csproj ファイルを変更しなくても、ccnet.config ファイルに適切な変更を加えることで実装できるソリューションが必要なだけです。

ありがとう、アンジ

4

3 に答える 3

11

プロジェクト全体で共有 AssemblyInfo を使用するのはどうですか?

これが私たちの製品に対する私たちの取り組みです。

  • 各プロジェクトには独自の AssemblyInfo.cs があります。これには、AssemblyTitle、AssemblyDescription、Guid、およびそのアセンブリに固有のその他の属性が含まれています。

  • 各プロジェクトには、他の 2 つのアセンブリ情報ファイルもあります。これらは、直接のファイルではなくリンクとして追加されることに注意してください (VS -> 追加 -> 既存のファイル -> リンクとして追加 (追加の横にある小さな下向き矢印))。

2 つのリンク ファイル:

  1. CompanyAssemblyInfo.cs - AssemblyCompany、AssemblyCopyright、AssemblyConfiguration、CLSCompliant、SecurityPermission など。基本的に、すべてのアセンブリに標準で必要なものすべて。

  2. ProductAssemblyInfo.cs - AssemblyProduct、AssemblyVersion、AssemblyFileVersion。これにより、1 つのファイルからすべてのアセンブリに同じバージョンをプッシュできます。

私たちの CI とリリース プロセスはより複雑ですが、製品バージョン (アセンブリ、インストーラー、すべて!) を制御する単一のポイント (ファイル) です。

于 2009-01-22T23:40:46.800 に答える
3

これにはpowershellを使用します。lpath はソース コードへのパスで、buildnum は追加したビルド番号です。それが私が実際にこれで行うすべてです。ただし、使用可能な他のフィールドの一部またはすべてを変更または設定するのに十分なはずです。lpath を渡し、CC.NET で使用可能な環境変数からビルド番号を取得します。構成ファイルのコマンド ラインで渡す内容を変更するだけで、このスクリプトを何度も使用できます。また、実際に変更する必要がある場合は、C++ コードのリソース ファイルを変更するものもあります。

$files = Get-ChildItem $lpath -recurse -filter *AssemblyInfo.cs -name

Foreach ($file in $files)
{
    $file = $lpath + "\" + $file

    $fileObject=get-item $file

    $fileObject.Set_IsReadOnly($False)

    $sr = new-object System.IO.StreamReader( $file, [System.Text.Encoding]::GetEncoding("utf-8") ) 
    $content = $sr.ReadToEnd()
    $sr.Close()

    $content = [Regex]::Replace( $content, '(?<=\[assembly: AssemblyVersion\("[0-9].[0-9].[0-9].)[0-9]?[0-9]?[0-9]', $buildnum);
    $content = [Regex]::Replace( $content, '(?<=\[assembly: AssemblyFileVersion\("[0-9].[0-9].[0-9].)[0-9]?[0-9]?[0-9]', $buildnum);

    $sw = new-object System.IO.StreamWriter( $file, $false, [System.Text.Encoding]::GetEncoding("utf-8") )
    $sw.Write( $content )
    $sw.Close()

    $fileObject.Set_IsReadOnly($True)
}
于 2009-01-13T13:07:40.307 に答える