0

ビルド プロセスの自動化に関するいくつかの優れた記事を読みましたが、私が興味を持っているのはビルド プロセスだけではなく、パブリッシュです。

基本モデルを使用する Web サイトとサービスがいくつかあります。そのモデルを変更するとき (これはあまり頻繁には起こりません)、すべてのサイト/サービスを再構築し、適切なターゲット ディレクトリ (既に構成に含まれています) に公開する必要があります。

すべてのプロジェクト フォルダーは 1 つのフォルダーに存在します。

私が検討しているアプローチは、ビルド/公開するプロジェクトの名前付きリストを使用して、MSBuild を使用してメイン フォルダーからスクリプトを実行することです。

ここでMSBuild のビルド スクリプトを作成する良い例を見つけましたが、これは 1 つのプロジェクトのビルドのみを満たします。

同じビルド/公開スクリプトを実行するために、プロジェクト/ディレクトリの名前付きリストを処理するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

1

最終的な再利用可能なソリューションは次のとおりです。

要約:

ルート フォルダーにいくつかのサイトがあり、それらのディレクトリとプロジェクト ファイル名はすべて Web サイトの値と名付けられています。スクリプトを実行して、コマンド ラインからすべてのサイト (または選択したリスト) を公開できるようにしたいと考えています。その後、Web サイトは IIS サーバー ディレクトリに公開されます。

まず、Web サイト名のパラメーターを受け取る MSBuild スクリプトを作成します。

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Compile,Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name ="DeleteFiles">
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete>
  </Target>

  <Target Name="Compile" DependsOnTargets="DeleteFiles">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
      Targets="Clean;Build"
      Properties="OutputPath=..\$(ProjectName)\bin"/>
  </Target>

  <Target Name="Deploy" DependsOnTargets="Compile">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
        Targets="ResolveReferences;_CopyWebApplication"
        Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" />
  </Target>

</Project>

次に、1 行に 1 つの Web サイト名を含むテキスト ファイルを作成します。これは、「dir > sites.txt」を実行してから列を編集して余分なコンテンツを削除することで簡単に生成できます。

すなわち。

site1.com
site2.com
site3.com
site4.com

最後に、sites.txt に含まれるリストを反復処理し、MSBuild スクリプトを実行するバッチ ファイルを作成します。

@echo --------------------------------------------
@echo --  Iterating through list in sites.txt  --
@echo --------------------------------------------
for /f %%X in (sites.txt) do msbuild build.xml /p:ProjectName="%%X" /v:n

このソリューションは、ルートからの残りの Web サイトと同じレベルのディレクトリに存在します。これが、ビルド スクリプトの "..\$(ProjectName)" の理由です。

たくさんのサイトを公開する素晴らしい方法です。これが誰かの役に立てば幸いです。

于 2011-12-27T18:19:36.930 に答える
0

カスタム メタデータを持つ要素を使用する<ItemGroup />と、次のようになります。

   <ItemGroup>
      <ProjectToPublish Include="WebApplication1\WebApplication1.csproj" >
                <OutputDir>OutputDir1</OutputDir>
      </ProjectToPublish>
      <ProjectToPublish Include="WebApplication2\WebApplication2.csproj" >
                <OutputDir>OutputDir2</OutputDir>
      </ProjectToPublish>
   </ItemGroup>

   <Target Name="Publish" Inputs="@(ProjectsToPublish)" Outputs="%(Identity).Dummy">
      <RemoveDir Directories="%(OutputDir)" ContinueOnError="true" />
      <MSBuild Projects="%(Identity)"
         Targets="ResolveReferences;_CopyWebApplication"
         Properties="WebProjectOutputDir=$(OutputDir);
         OutDir=%(OutputDir)\" />
   </Target>
于 2011-12-18T23:00:50.427 に答える
0

というわけで、やっとこれをもう一度見る時間ができました。

私が持っているすべての Web サイトと同じレベルのフォルダーにある次の MSBuild スクリプトを作成しました。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">


  <Target Name ="DeleteFiles">
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete>
  </Target>

  <Target Name="Compile" DependsOnTargets="DeleteFiles">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
      Targets="Clean;Build"
      Properties="OutputPath=..\$(ProjectName)\bin"/>
  </Target>

  <Target Name="Deploy" DependsOnTargets="Compile">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
        Targets="ResolveReferences;_CopyWebApplication"
        Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" />
  </Target>


</Project>

そして、次のように呼び出されます。

msbuild build.xml /p:ProjectName="websitetopublish.com" /v:n

1 つのサイトではうまく機能しますが、テキスト ファイルを読み取るバッチ関連のソリューションが必要です。そのテキスト ファイルのエントリごとに、ビルド プロセスを実行します。

これに.Netコンソールアプリを簡単に作成できますが、やり過ぎです。バッチファイルのループメカニズムを使用してこれを達成する方法を知りたいです。

于 2011-12-27T05:55:24.593 に答える