アセンブリのリビジョン情報を自動的に更新する C# の例を次に示します。これは、あまり精巧ではない Will Dean の回答に基づいています。
例 :
- プロジェクトのフォルダーPropertiesにある AssemblyInfoTemplate.cs に AssemblyInfo.cs をコピーします。
- AssemblyInfoTemplate.csのBuild ActionをNoneに変更します。
AssemblyFileVersion の行を次のように変更します。
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
以下を追加することを検討してください。
[assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")]
、
これにより、アセンブリがビルドされたソースのリビジョン ステータスに関する詳細が得られます。
次のビルド前イベントをプロジェクト ファイルのプロパティに追加します。
subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f
AssemblyInfo.cs を svn 無視リストに追加することを検討してください。リビジョン番号と日付を置き換えると、ファイルが変更され、重要でない変更とリビジョンが発生し、$WCMODS$ は true と評価されます。もちろん、AssemblyInfo.cs をプロジェクトに含める必要があります。
Wim Coenen の反論に応えて、Darryl の提案とは対照的に、AssemblyFileVersion も2^16 を超える数値をサポートしていないことに気付きました。ビルドは完了しますが、実際のアセンブリのプロパティファイル バージョンは AssemblyFileVersion modulo 65536 になります。したがって、1.0.0.65536 と 1.0.0.131072 は 1.0.0.0 などになります。この例では、常に正しいリビジョン番号があります。 AssemblyInformationalVersion プロパティで。これが重大な問題であると考える場合は、ステップ 3 を省略できます。
編集:このソリューションをしばらく使用した後の追加情報。
- AssemblyInfoTemplate.cs ではなく AssemblyInfo.cst を使用するようになりました。これは、ビルド アクションオプションNoneが自動的に設定され、エラー リストが乱雑になることはありませんが、構文の強調表示が失われるためです。
AssemblyInfo.cst ファイルに 2 つのテストを追加しました。
#if(!DEBUG)
$WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$
#endif
#if(!DEBUG)
$WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$
#endif
これを使用すると、通常、コミット後、リリース ビルドを成功させる前に、完全な SVN 更新を実行する必要があります。それ以外の場合、$WCMIXED は true になります。これは、コミットされたファイルがコミット後にヘッドリビジョンに再設定されているが、他のファイルはそうではないという事実が原因のようです。
- svn のバージョン情報をチェックするためのスコープを設定する subwcrev の最初のパラメータ「$(SolutionDir)」が常に期待どおりに機能するかどうか、疑問がありました。個々のアセンブリが一貫したリビジョンにあることに満足している場合は、おそらく $(ProjectDir) にする必要があります。
追加
@tommylux によるコメントに回答します。
SubWcRev は、プロジェクト内の任意のファイルに使用できます。Web ページにリビジョン情報を表示する場合は、次の VersionInfo テンプレートを使用できます。
public class VersionInfo
{
public const int RevisionNumber = $WCREV$;
public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
public const string RevisionsInWorkingCopy = "$WCRANGE$";
public const bool UncommitedModification = $WCMODS?true:false$;
}
AssemblyInfo.cst のようなビルド前のイベントを追加すると、関連するすべての SubVersion 情報に簡単にアクセスできます。