11

通常の SLN ファイルがあり、コマンド ラインから msbuild を使用して正常にコンパイルしています。私はこれをします:

C:\slndir> msbuild /p:OutDir=C:\slnbin\

そして、C:\slnbin_PublishedWebsites\ にデプロイされる Web サイトを除いて、すべてを C:\slnbin にダンプします。

私が望むのは、すべてのバイナリをbin dirにドロップするだけでなく、各実行可能プログラムに、各Webサイトが取得するのと同様の独自の「展開」フォルダーを持たせることです。

たとえば、次のプロジェクトがある場合: - Common - Lib1 - Service1 - Lib2 - Service2

私は取得したい:

  C:\slnbin\ // Everything
  C:\slbin\Deploy\Service1 // Common, Lib1, Service1
  C:\slbin\Deploy\Service2 // Common, Lib2, Service2

「msbuild /p:OutDir=C:\slnbin\$(ProjectName)」のようなことを試してみましたが、それをリテラルとして扱い、実際の「$(ProjectName)」サブディレクトリを作成するだけです。

できれば、個々のプロジェクトなどをすべて変更する必要はありません。

これは可能ですか?簡単?

4

2 に答える 2

13

John Saunders が言ったように、プロセスを処理するマスター MSBuild ファイルが必要です。

MSBuild Community Tasksを使用したサンプルを次に示します。特定のソリューションのプロジェクトを取得するGetSolutionProjects

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

  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

  <!-- Specify here, the solution you want to compile-->
  <ItemGroup>
    <Solution Include="C:\slndir\solution.sln"/>
  </ItemGroup>

  <PropertyGroup>
    <Platform>AnyCPU</Platform>
    <Configuration>Debug</Configuration>

    <!-- Your deployment directory -->
    <DeployDir>C:\slbin\Deploy</DeployDir>
  </PropertyGroup>

  <!-- Gets the projects composing the specified solution -->
  <Target Name="GetProjectsFromSolution">
    <GetSolutionProjects Solution="%(Solution.Fullpath)">
      <Output ItemName="ProjectFiles" TaskParameter="Output"/>
    </GetSolutionProjects>
  </Target>

  <Target Name="CompileProject" DependsOnTargets="GetProjectsFromSolution">
    <!-- 
      Foreach project files
        Call MSBuild Build Target specifying the outputDir with the project filename.
    -->
    <MSBuild Projects="%(ProjectFiles.Fullpath)"
             Properties="Platform=$(Platform);
             Configuration=$(Configuration);
             OutDir=$(DeployDir)\%(ProjectFiles.Filename)\"
             Targets="Build">
    </MSBuild>
  </Target>
</Project>
于 2009-03-10T08:21:15.240 に答える
1

これは「手動」で行う必要があります。ソリューションをビルドするマスター MSBUILD プロジェクト ファイルを作成し、すべてのソリューション出力を必要な場所にコピーします。これは (大まかに) Visual Studio Team Build が行う方法です。

于 2009-03-10T02:50:03.197 に答える