代码之家  ›  专栏  ›  技术社区  ›  MichaelGG

msbuild sln并仍然获得单独的项目输出?

  •  10
  • MichaelGG  · 技术社区  · 15 年前

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

    c:\slndir>msbuild/p:outdir=c:\slnbin\

    它将所有内容转储到c:\slnbin中,除了部署到c:\slnbin_publishedwebsites\的网站。

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

    例如,如果我有以下项目: 共同的 -LIB1 - Service 1 -LIB2 - Service 2

    我想得到:

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

    我试过做类似“msbuild/p:outdir=c:\slnbin\$(projectname)”的事情,但它只是把它当作一个文本,并创建一个实际的“$(projectname)”子目录。

    更可取的是,我不必修改每个单独的项目等等。

    这有可能吗?容易的?

    2 回复  |  直到 15 年前
        1
  •  13
  •   Julien Hoarau    15 年前

    正如约翰桑德斯所说,您需要有一个主msbuild文件来处理这个过程。

    这是一个使用 MSBuild Community Tasks : 获取解决方案项目 获取给定解决方案的项目

    <?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>
    
        2
  •  1
  •   John Saunders KB22    15 年前

    你得“用手”来做。创建用于生成解决方案的主msbuild项目文件,然后将所有解决方案输出复制到需要的位置。这就是(大致)Visual Studio团队构建的方式。