13

すべてのC++プロジェクトを自動的にバージョン管理するナイトリービルドプロセスがあります。仕組みは次のとおりです。バージョン番号にVersionNumber.h固有の共通ヘッダーファイルがあります。#define近くのビルドは、このファイルをチェックアウトし、その背後にある整数をインクリメントして#defineチェックインします。すべてのVisual C ++#includeは、そのヘッダーをリソースファイルに投影し、バージョンを指定するためにその定義を使用します(バージョンはsmthのようなものです1.0.3.ThatNumber)。

ここまでは順調ですね。ここで、同じデイリービルドでビルドされたC#クラスライブラリにも同じものを使用したいと思います。現在、それらはすべて持っています

[assembly: AssemblyVersion("1.0.*")]

AssemblyInfo.csのファイルとライブラリ1.0.HorribleNumber.AnotherHorribleNumberは、バージョンとして終了し、2つの数値はC++プロジェクトで使用される数値とは相関していません。

最小限の労力で、C#プロジェクトに同じ決定論的な自動バージョン番号を付けるにはどうすればよいですか?

4

4 に答える 4

12

まず、フルバージョンを次のように指定できます。

[assembly: AssemblyVersion("1.0.9.10")]

第 2 に、これをもう少し簡単にする (そして C++ のアプローチを反映する) 一般的なアプローチは、バージョン属性を含む共通の場所に単一の Version.cs ファイル (名前は重要ではありません) を配置することです。その後、このファイルをすべての cs プロジェクトへのリンクとして追加できますが、AssemblyInfo.cs ファイルからバージョン属性を削除することを忘れないでください。このようにして、更新するファイルは 1 つだけです (ビルドを実行する前に)。また、NeutralResourcesLanguage や CLSCompliant など、他の一般的なアセンブリ属性を Version.cs ファイルに入れることもできます。

単一の "Version.cs" アプローチを使用しない場合は、ソース コード ディレクトリ構造を再帰的に処理し、AssemblyInfo ファイルを (ビルドを実行する前に) 個別に更新できます。

あなたには関係ないかもしれませんが、バージョン番号 (AssemblyVersion 内) の最大範囲は 16 ビットです。これらの数値に日付が使用されている場合、これが問題になるのを見てきました。自由度を高めたい場合は、AssemblyFileVersion にこれらの制限はありませんが、アセンブリの ID の一部ではなく、純粋に .Net での情報提供のみを目的としています。一部のツールはこれらの組み合わせを表示するため、AssemblyVersion と AssemblyFileVersion を同じ値に設定するのが一般的です。

AssemblyVersion と AssemblyFileVersion の詳細については、以下を参照してください。

AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersion の違いは何ですか?

于 2010-07-27T08:16:21.453 に答える
2

自動ビルドにはFinalBuilderを使用し(TeamCityではこれを呼び出します)、この種の処理を自動的に実行します(つまり、他の場所(iniファイル、環境変数、コマンドラインなど)からビルド番号を取得してから、すべてを更新します。ビルド番号付きのアセンブリバージョン。)

明らかにそれを行う唯一の方法ではありませんが、FinalBuilderのようなものを使用したことがない場合は、試してみてください-私たちの経験では、なぜ以前にMakefileやバッチファイルを巧みに使っていたのか疑問に思い始めています...

しかし、それを望まない場合は、VersionNumber.hファイルを生成/変更して、AssemblyVersion行を含むVersionNumber.csも吐き出す同じプロセスを取得できますか?次に、そのファイルをプロジェクトに含めることができます。

AssemblyVersionディレクティブは、他のすべてのAssemblyInfoのものと同じファイルにある必要はありません。

于 2010-07-27T08:11:56.807 に答える
1

C ++テクニックですでに行っているようなことを行うことができますが、"assembly: AssemblyVersion(文字列を検索し、引用符で囲まれた番号を完全な必要なバージョン番号に置き換えます。

C#では、バージョン番号のワイルドカードは、バージョン番号を自動的に更新するようにコンパイラーに指示します。ワイルドカードがない場合は、指定された完全な番号のみが使用されます。

例えば

[assembly: AssemblyVersion("1.0.3.10")]

ファイルで変更するまで、常にそのバージョン番号を使用します。

于 2010-07-27T08:11:44.433 に答える
1

リンクを追加することで、別のファイルからアセンブリ バージョンを設定できます。同様の解決策は

リンクテキスト

于 2010-07-27T08:14:13.107 に答える