11

我有一个普通的 SLN 文件,我正在使用命令行中的 msbuild 对其进行编译。我这样做:

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

它会将所有内容转储到 C:\slnbin,但网站除外,这些网站会部署到 C:\slnbin_PublishedWebsites\。

我想要的不仅是将所有二进制文件放在 bin 目录中,而且让每个可执行程序都有自己的“已部署”文件夹,类似于每个网站获得的文件夹。

因此,例如,如果我有以下项目: - 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 社区任务的示例: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 回答