6

Webアプリケーションプロジェクトのビルド時にコードと構成ファイルを生成するカスタムMSビルドスクリプトがいくつかあります。現在、これらのビルドスクリプトは、Webプロジェクトの.csprojファイルの「BeforeBuild」および「AfterBuild」ターゲットをオーバーライドすることによって呼び出されます。ただし、別のソリューションでは、ローカルIISから直接開かれ、.csprojファイルがないWebサイトプロジェクトがあります。このタイプのプロジェクトのビルドをカスタマイズするにはどうすればよいですか?

WebサイトのMSビルドプロセスをカスタマイズできない場合は、カスタムMSビルドスクリプトを実行する.batファイルのようなものを呼び出すだけで十分です。現在、.batファイルを使用していますが、開発者は手動で実行する必要がありますが、これを忘れることがあります。ビルドをクリックしたときに自動的に開始する簡単な方法がわかりません。

VisualStudioとTeamBuildの両方で、ソリューションビルドの一部として実行されるものが欲しいです。

4

4 に答える 4

5

Webアプリケーションとは異なり、VisualStudioは実際にはWebサイト自体を構築しないことに注意してください。もちろん、VSから実行できるビルドコマンドは確かにありますが、基本的には、サイトがエラーなしでビルドできることを確認するだけです。重要な点は、VSからWebサイトを構築する場合、ビルドアーティファクトはまったく生成されないということです。代わりに、ビルドする必要のあるものはすべて、実行時にhttpリクエストをサイトに送信するときに発生します。

実行時にビルドする方法をカスタマイズする方法はさまざまですが(ビルドプロバイダーを使用するなど)、目標がweb.configファイルを生成することである場合、これは役に立ちません。

別の方法として、Webサイトに別のプロジェクト(ライブラリなど)への依存関係を持たせ、そのプロジェクトにサイトに代わって(サイトのファイルを変更するなどして)カスタムビルドアクションを実行させることもできます。プロジェクトの依存関係により、他のプロジェクトは常にWebサイトの前に構築されることが保証されます。

于 2012-12-18T02:10:00.960 に答える
3

ソリューションに別のMSビルドファイルを追加し、Visual Studioのプロジェクトの依存関係を使用して、Webサイトの前にビルドするようにすることで、必要なものを実現しました。

実際のビルドファイルは非常に最小限で、「Configure.csproj」と呼ばれ、Webサイトのルートにあります。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">
  <Import Project="CodeGeneration.targets" />
  <Target Name="Build">
    <CallTarget Targets="GenerateCode" />
  </Target>
  <Target Name="Rebuild">
    <CallTarget Targets="GenerateCode" />
  </Target>
  <Target Name="Clean">
  </Target>
</Project>

ソリューションを右クリックし、[既存のプロジェクトを追加]を選択して、このファイルを選択します。

ビルドするC#がない場合に* .csprojという名前を付けるのは奇妙に思えますが、このファイル拡張子は、[既存のプロジェクトを追加]をクリックしたときにVisualStudioによって認識されるものです。

次に、これがWebサイトの前に構築されていることを確認するには、ソリューションを右クリックして[プロジェクトの依存関係]を選択します。[プロジェクト]ドロップダウンリストからWebサイトプロジェクトを選択し、[構成]の横のチェックボックスをオンにします。

もちろん、別のプロジェクトを追加してWebサイトへの依存関係を追加することにより、Webサイトの後にカスタムビルドを実行することもできます。

于 2012-12-23T15:25:06.873 に答える
3

Visual Studio <2012:Web展開プロジェクト

2005年以降、Microsoftは、Web展開プロジェクトWDPと呼ばれることもあります)と呼ばれるVisualStudio用の個別のインストール可能なプロジェクトタイプをリリースしました。それは彼のブログでScottGuthrieによって最初に明らかにされました、そしてそれは何年にもわたってあまり変わっていません、それで彼の紹介はWDPが提供しなければならないことを詳細に理解するためにまだ良い読み物です(またはMSDNリファレンスに行きます)。

WDPを作成すると、プロジェクトは、既存のWebサイトプロジェクトへの組み込み参照を使用してソリューションに追加されます。これは実際にはMSBuildファイル(.wdproj)のみであり、その内容はVisualStudioに追加される設定ダイアログを介して制御されます。このプロジェクトがビルドされると、通常はサーバー上のASP.NETランタイムによって生成されるアセンブリが出力されます(たとえば、各ディレクトリごとのASP.NETファイルの最初の要求時)。本質的に、あなたはいわゆるプリコンパイルされたウェブサイトを手に入れます。

これはMSBuildに基づいているため、これを既存のビルドスクリプトに簡単に追加したり、<BeforeBuild>and<AfterBuild>要素(<BeforeMerge>およびand <AfterMerge>)にカスタマイズを追加したりできます。これはビルドサーバーでも機能するはずですが、一部の機能ではWindowsSDKのインストールが必要になる場合があります。(私の経験では、aspnet_merge.exeが主な問題でした。プロジェクトファイルで構成されている場合は、すべての出力アセンブリを1つのアセンブリにマージする必要があります。)

このソリューションは、WebサイトプロジェクトをMSBuildするための「公式」な方法であり、ビルドイベントの前後をシミュレートするための依存関係を持つ空のクラスライブラリプロジェクトを追加するよりも複雑ではありません。欠点として、Webサイトが大きい場合、ビルド時間が長くなる可能性があります。ただし、最後に、コンパイル済みのWebサイトを構築しておくと、全体的な展開作業が改善される可能性があります。

Visual Studio 2008および2010のダウンロード(申し訳ありませんが、VS2005のダウンロードは見つかりません。SP1の一部である可能性があります)。

Visual Studio 2012

Visual Studio 2012では、状況が変わりました。WDPのリリースは計画されていませんが(需要はありますが)、 Web開発ツールブログのこのブログ投稿によると、新しい公開機能はWebサイトプロジェクトでサポートされる予定です。公開プロファイルもMSBuildファイルであるため、WDPの場合と同様に、既存のビルドスクリプトにそれらを統合できるはずです。参照:Visual Studio 2012 Web展開プロジェクトは廃止されました–ロングライブパブリッシングプロファイル

現在、WebアプリケーションプロジェクトとWebサイトプロジェクトの両方を使用している場合は、両方のタイプのプロジェクトに同じビルド設定を使用すると便利な場合があります。その場合、近い将来、 Webサイトプロジェクトのプロファイルの公開サポートがリリースされたときに(これをサポートするASP.NETおよびWeb Tools 2012.2 RCがあります)、2つの別個の空のクラスライブラリではなく、必ずそれに切り替える必要があります。プロジェクト。

于 2012-12-23T19:55:22.623 に答える
-3

このために独自のMSBuildプロジェクトファイルを作成できます。かなりシンプルで、ここにウォークスルーがあります:http: //msdn.microsoft.com/en-us/library/dd576348.aspx

次に、ビルド後のコマンド用に作成したファイルにこれを追加するだけです。

<Target Name="AfterEndToEndIteration">
  <Exec Command="YourPath\YourCommand.bat" />
</Target>

幸運を

于 2012-12-17T16:38:55.617 に答える