2012-05-08 78 views
3

我想构建许多web项目,并将它们输出到如./output/Project1 ./output/Project2等目录。这些文件夹中的每一个本质上将包含什么输出到_PublishedWebsites。我已经试过这样:许多web项目输出到同一目录的MSBuild解决方案

msbuild support.sln /p:configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=c:/ws/code/supportsite/output/ /t:package 

但似乎与它内建每个项目覆盖输出目录的内容。

+0

我宁愿用现有的命令做到这一点。编号倾向于不编写自定义构建任务。 – Joe

+0

我也对此感兴趣,你有没有找到解决方案? –

回答

0

为什么不制作目标文件。

XCopyWebDeploy.targets

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir> 

     <XCopyDeployWebPackage Condition=" '$(XCopyDeployWebPackage)' == '' ">false</XCopyDeployWebPackage> 
    </PropertyGroup> 

    <ItemGroup> 
     <ProjectFileItem Include="$(ProjectPath)"/> 
    </ItemGroup> 

    <PropertyGroup> 
     <!-- Make the build depend on web deploy packages --> 
     <BuildDependsOn Condition="$(XCopyDeployWebPackage) == 'true'"> 
      $(BuildDependsOn); 
      Package; 
      XCopyDeployWebPackage; 
     </BuildDependsOn> 
    </PropertyGroup> 

    <Target Name="XCopyDeployWebPackage"> 
     <CreateItem Include="$(ProjectDir)obj\$(Configuration)\Package\PackageTmp\**\*.*"> 
      <Output ItemName="XCopyWebDeployPackageOutputFiles" TaskParameter="Include"/> 
     </CreateItem> 
     <CreateProperty Value="c:\ws\code\supportsite\output\%(ProjectFileItem.Filename)"> 
      <Output PropertyName="XCopyWebDeployOutput" TaskParameter="Value"/> 
     </CreateProperty> 
     <Copy 
      SourceFiles="@(XCopyWebDeployPackageOutputFiles)" 
      DestinationFiles="@(XCopyWebDeployPackageOutputFiles->'$(XCopyWebDeployOutput)\%(RecursiveDir)%(Filename)%(Extension)')"/> 
    </Target> 
</Project> 

而在web项目(一个或多个)文件导入。

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <PropertyGroup> 
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
     <ProductVersion> 
     </ProductVersion> 
     <SchemaVersion>2.0</SchemaVersion> 
     <ProjectGuid>{BF6B6392-1398-42D3-AA90-ED87D02D351A}</ProjectGuid> 
     <ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> 
     <OutputType>Library</OutputType> 
     <AppDesignerFolder>Properties</AppDesignerFolder> 
     <RootNamespace>MvcApplication1</RootNamespace> 
     <AssemblyName>MvcApplication1</AssemblyName> 
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 
     <MvcBuildViews>false</MvcBuildViews> 
     <UseIISExpress>true</UseIISExpress> 
     <IISExpressSSLPort /> 
     <IISExpressAnonymousAuthentication /> 
     <IISExpressWindowsAuthentication /> 
     <IISExpressUseClassicPipelineMode /> 
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 
     <RestorePackages>true</RestorePackages> 
     <!--!!!--> 
     <XCopyDeployWebPackage>true</XCopyDeployWebPackage> 
     <!--!!!--> 
    </PropertyGroup> 

    <!-- Some lines omitted --> 

    <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> 

    <!--!!!--> 
    <Import Project="$(SolutionDir)\XCopyWebDeploy.targets" /> 
    <!--!!!--> 

    <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
     Other similar extension points exist, see Microsoft.Common.targets. 
    <Target Name="BeforeBuild"> 
    </Target> 
    <Target Name="AfterBuild"> 
    </Target> --> 
</Project> 
相关问题