msbuild SLN仍然可以获得单独的项目输出?

Mic*_*lGG 11 msbuild projects-and-solutions visual-studio

我有一个普通的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
Run Code Online (Sandbox Code Playgroud)

我尝试过像"msbuild/p:OutDir = C:\ slnbin\$(ProjectName)"这样的东西,但它只是将它视为文字并创建一个实际的"$(ProjectName)"子目录.

我不需要修改每个项目等等.

这可能吗?简单?

Jul*_*rau 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>
Run Code Online (Sandbox Code Playgroud)

  • "与使用Exec任务启动MSBuild.exe,此任务将使用相同的MSBuild工艺打造的子工程.那可以跳过是父母和孩子之间建立共享已建目标的列表,这任务也越来越快因为没有创建新的MSBuild进程." 所以我想foo​​.dll将会构建一次,但我不确定. (2认同)
  • 什么是构建它所需的命令行? (2认同)