使用构建文件和构建定义构建和复制非Web应用程序

时间:2013-09-20 10:02:09

标签: visual-studio-2012 msbuild tfs2012 tfsbuild

我目前正在使用TFS2012和VS2012技术来构建和部署Web应用程序和非Web应用程序。

进行了研究:
  - 阅读Microsoft Build Engine内部,使用MSBuild和Team Foundation Build书   - 阅读Stackoverflow,msdn和其他论坛以获取有关我的问题的帮助。

不幸的是,我仍然面临着这个问题。

当前设置:

我有一个:

  • 名为 ClassLib1.sln
  • 的解决方案 解决方案中的
  • Build.proj 文件
  • 2解决方案中的项目:
    • ClassLib1.csproj - 非Web应用程序
    • MvcApp1.csproj - Web应用程序
  • 构建执行构建的服务器
  • 构建 Build.proj 文件的构建定义( DefaultTemplate.11.1.xaml )。

Build.proj 文件包含以下配置:

<?xml version="1.0" encoding="utf-8" ?>  
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <ItemGroup>  
    <DirectoriesToDelete Include="\\server\build\test\MvcApp1" />  
    <DirectoriesToDelete Include="\\server\build\test\ClassLib1" />  
    <SolutionsToBuild Include="ClassLib1.sln" />  
    <ProjectsToPublish Include="MvcApp1\MvcApp1.csproj">  
      <Properties>  
        OutputPath=$(MSBuildProjectDirectory)\build\test\ClassLib1\MvcApp1\; 
        UseWPP_CopyWebApplication=true;  
        PipelineDependsOnBuild=false;  
        SkipInvalidConfigurations=true;  
        DeployOnBuild=true;  
        DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;  
        AutoParameterizationWebConfigConnectionStrings=false;  
        _PackageTempDir=\\server\build\test\MvcApp1  
      </Properties>  
    </ProjectsToPublish>  
    <ProjectsToPublish Include="ClassLib1\ClassLib1.csproj">  
      <Properties>  
        OutputPath=\\server\build\test\ClassLib1\  
      </Properties>  
    </ProjectsToPublish>  
  </ItemGroup>  
  <Target Name="Build">  
    <RemoveDir Directories="@(DirectoriesToDelete)" />  
    <MSBuild Projects="@(SolutionsToBuild)" />  
    <MSBuild Projects="@(ProjectsToPublish)" />  
  </Target>  
</Project>  

什么有效:

在本地执行msbuild时(例如 msbuild Build.proj / t:Build ),一切正常。这两个项目都构建并输出到指定的 PackageTempDir OutPutPath

手头的问题:

但是,一旦我尝试通过Build定义执行构建,那么只有 MvcApp1.csproj 文件在指定位置输出。缺少 ClassLib1.csproj 文件。

我尝试了很多东西,到目前为止没有任何效果(除了手动操作)。

请注意我对此有些陌生,因此可能很容易错过理解或错过的东西。

1 个答案:

答案 0 :(得分:0)

我经过一些试验和错误后设法解决了这个问题。

对于非Web应用程序,我修改了ItemGroup以包含:

<ProjectsToPublish Include="..\Solution\FolderName\Project\ProjectName.csproj">
  <Properties>OutputPath=$(MSBuildProjectDirectory)\Environmen\Solution.FolderName.ProjectName;OutDir=C:\CustomBinariesOutDir\Environment\App\</Properties>
</ProjectsToPublish>

我创建了一个复制目标

<Target Name="Copy" AfterTargets="Build">
<CreateItem Include="C:\CustomBinariesOutDir\environment\**\*.*" >
  <Output TaskParameter="Include" ItemName="FilesToCopy"/>
</CreateItem>
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="\\serverip\TestBuild\environment\%(FilesToCopy.RecursiveDir)" />

似乎问题是msbuild不允许我直接复制二进制文件的构建位置,所以我将它们输出到同一服务器上的另一个文件夹中,然后使用复制目标将它们移动到正确的位置。

希望这有助于其他人。