1

私の自動化された NAnt ビルドには、(SubSonic を使用して) データベースから大量のコードを生成するステップがあり、コードはデータベース内のスキーマ名と一致するフォルダーに分割されます。例えば:

  • /生成コード
    • /dbo
      • SomeTable.cs
      • その他のテーブル.cs
    • /abc
      • Customer.cs
      • Order.cs

スキーマ名は、アプリが必要とする生成されたクラスを分離するためにあります。たとえば、この中央フォルダーから生成されたコードを取得する ABC アプリがあります。次のように、ビルド前のイベントでそれを行っています。

del /F /Q $(ProjectDir)Entities\generated*.cs

copy $(ProjectDir)....\generated-code\abc*.cs $(ProjectDir)Entities\generated*.cs

そのため、すべてのビルドで、Nant スクリプトはジェネレーターを実行し、すべてのコードを中央の保持場所に配置します。次に、ソリューション ビルドを開始します。これには、生成されたクラスを必要とする各プロジェクトのビルド前イベントが含まれます。

だからここに私が見ている摩擦があります:

1) 新しいアプリごとに、このビルド前イベントをセットアップする必要があります。これをしなければならないのはちょっと面倒です。

2)ビルドサーバーではコードを生成しないため、実際にはこれらの各コマンドの前に IF $(ConfigurationName) == "Debug" があるため、リリースビルドでは発生しません

3) コマンドが失敗し、ローカル ビルドが失敗することがあります。次の場合は失敗します: - 生成されたコードがまだない (新しいプロジェクトをセットアップしただけで、データベースがまだない) - ディレクトリに既存のコードがない (最初のビルド)

通常、これらはマイナーな修正であり、新しいプロジェクトまたは新しいマシンをビルドで起動して実行する方法をハッキングしただけですが、ワンクリック ビルドの涅槃を妨げています。

ですから、もう少し耐久性があるところでこれを改善する方法についての提案を聞きたいです。アプリケーション フォルダへのコードのコピーを NAnt スクリプトに移動することはできますか? これは私にはちょっと後ろ向きに思えますが、私はその議論に喜んで耳を傾けます。

OK、発射してください:)

4

3 に答える 3

1

DBスキーマはどのくらいの頻度で変更されますか?データベース関連のファイルをオンデマンドで生成し(たとえば、スキーマが変更されたとき)、それらをコードリポジトリにチェックインすることはできませんか?

データベーススキーマが変更されない場合は、コンパイルされた* .csクラスをパッケージ化して、アーカイブを他のプロジェクトに配布することもできます。

于 2008-09-30T20:07:35.567 に答える
0

ソリューションには、生成されたコードから完全に構築された 2 つのプロジェクトがあります。基本的に、別のプロジェクトのビルド後のステップとしてコード ジェネレーター .exe を実行し、コードの生成と共に Visual Studio のアクティブなインスタンスを自動化して、生成されたプロジェクトがソリューション内にあることを確認します。生成されたコード ファイル、およびそれらが必要に応じて TFS にチェックアウト/追加されること。

VS の自動化段階でフレーク アウトすることはめったになく、「手動で」実行する必要がありますが、これは通常、VS の複数のインスタンスが開いていて、ソリューションのインスタンスが 1 つ以上開いていて、どれがどれかを判断できない場合にのみ発生します。自動化することになっています。

私たちのソリューションとプロセスは、自動ビルドが行われる前に生成が常に正しく行われている必要があるため、このアプローチがうまくいかない場合があります。

于 2008-09-05T18:02:58.527 に答える
0

ええ、VS を方程式から外して、VS からのビルドが単にコードと参照をコンパイルするだけになるようにしたいと思います。

私は NAnt スクリプトを管理できます... NAnt スクリプトを 1 つ持つこと、またはプルするのではなくプロジェクトにコードをプッシュできるプロジェクトごとに 1 つの NAnt スクリプトを使用することについてアドバイスがあるかどうか疑問に思っています。

これは、コードを生成するためにオプトインする必要があることを意味します。

于 2008-09-05T18:56:10.430 に答える