1

サービスモデルとしてのソフトウェア上のさまざまなサーバー上のクライアントに対して実行するC#デスクトップアプリケーションがあります。私たちはまだドットネットフレームワーク2を使用しています。このソフトウェアには、サーバーによってスローされた外部データをキャッチするための独立したアプリケーションがあるアーキテクチャがあります。次に、それに基づいて計算を行うためのアプリケーション。また、クライアントが出力を確認するもう1つのアプリケーション。3つのアプリケーション間のリンクは、DBと通信する別のアプリケーションです。

4つのソリューションは、ソース制御用のSVN上にあります。ただし、リリース管理は引き続き手動で行われ、パッチはログを確認し、dll、pdbs、xmlを含めることで手動で作成されます。コードが変更されたプロジェクトの場合など。

アセンブリのバージョン管理は実装されておらず、パッチまたはリリースの管理は暗闇の中で行われています。

コードから自動パッチを生成するための業界慣行を知りたいです。また、SVNのリビジョンごとにパッチが必要です。また、アセンブリのバージョン管理はこれに役立ちますか?

継続的インテグレーションについて多くのことを読みましたが、コードの正確さを監視するための単体テストやその他の凝ったコードがないため、失敗します。現時点で私が興味を持っているのは、簡単に適用および削除できるパッチを作成する方法を実装することだけです。また、ログを手動で維持するのではなく、自動化された方法で、どのリリースがどのレベルにあるか(またはどのパッチが適用されているか)を監視する方法を判断する方法を知りたいです。

4

1 に答える 1

0

SvnVersion.cs最後にコミットされたリビジョンを含むファイルを作成するビルドスクリプトを使用します。このファイルはソリューションのルートに配置され、ソリューション内のすべてのプロジェクトに追加されます(ただし、リンクとして追加され、コピーされません)。

SvnVersion.Template.csファイル( )のテンプレートは次のようになります。

using System.Reflection;
[assembly: AssemblyVersion("1.0.0.$WCREV$")]
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

そして、TortoiseSVNを使用して、これらのプレースホルダーをバッチスクリプトに入力するだけです。

type "%TRUNKPATH%SvnVersion.Template.cs" > "%TRUNKPATH%\SvnVersion.tmp"
SubWcRev "%TRUNKPATH%\" "%TRUNKPATH%SvnVersion.tmp" "%TRUNKPATH%SvnVersion.cs" -f
IF ERRORLEVEL 1 GOTO ERROR
DEL "%TRUNKPATH%SvnVersion.tmp"

TortoiseSVNを使用しない場合、ファイルでこの情報を取得する他の方法があります。

AssemblyInfo.csまた、これと同じ情報をファイルから削除する必要があります。そうしないと、コンパイルエラーが発生します。また、デバッグビルドを高速化するために、これはリリースビルドでのみ実行されます(また、デバッグビルドでは、新しいチェックアウト後など、ファイルが最初に存在しない場合にのみ実行されます)。

于 2012-11-08T14:23:55.417 に答える