0

私はビルドプロセスの自動化についていくつかお読みになりましたが、私が興味を持っているのは単なるビルドプロセスではなく、公開することです。Visual Studio 2010の機能の公開を自動化しますか?

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

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

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

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

同じビルド/パブリッシュスクリプトを実行するには、どのようにプロセスがプロジェクト/ディレクトリの名前付きリストを通過するのですか?

ありがとうございました。

+1

ソリューションの作成を検討しましたか? MSビルドはビルド方法も知っています。 –

+0

それは別のトラックに私を入れている...私はそれをチェックします、ありがとう。 – ElHaix

答えて

0

をだから私は最後に再びこれを見て取る時間を過ごしました。

私は、私が持っているすべてのウェブサイトと同じレベルのフォルダにある次の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コンソールアプリケーションを作成しましたが、残念ですが、バッチファイルのループメカニズムのいくつかを使用してこれを達成する方法を知りたいと思います。

+0

こんにちは...私はこれをやってみましたが、 "エラーMSB4057:ターゲット"コンパイル、デプロイ "がプロジェクトに存在しません"というエラーが表示されています...検索を試みましたが見つかりませんでした。同じ状況 – Why

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> 
1

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

要約:

私はいくつかのルートフォルダ内のサイトのディレクトリとプロジェクトファイル名を持つが、すべてのウェブサイトの価値を命名しています。スクリプトを実行するコマンドラインからすべてのサイト(または選択したリスト)を公開できるようにしたいと考えています。 Webサイトは、IISサーバーのディレクトリに公開されます。 1行に1つのウェブサイトの名前のテキストファイルを作成し、

<?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> 

次へ:

まず、Webサイト名のパラメータを取り込みMSBuildのスクリプトを作成します。これは、 "dir> sites.txt"を実行して不要なコンテンツを編集することで簡単に生成できます。

ie。

​​

最後に、リストを反復処理が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 

このソリューションでは、同じレベルのディレクトリに常駐ビルドスクリプトの ".. \ $(ProjectName)"という理由から、ルートからWebサイトの残りの部分。

多くのサイトを公開するうえで、これが誰かを助けてくれることを願っています。

関連する問題