1

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

进行的研究:
- 阅读 Inside the Microsoft Build Engine, Using MSBuild and 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)时,一切正常。两个项目都被构建并输出到指定的PackageTempDirOutPutPath

手头的问题:

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

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

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

4

1 回答 1

0

经过一番反复试验,我设法解决了这个问题。

对于非网络应用程序,我修改了 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 不允许我直接从构建二进制文件的位置复制,所以我将它们输出到同一服务器上的另一个文件夹中,然后使用复制目标将它们移动到正确的位置。

希望这对其他人有帮助。

于 2013-11-22T10:59:58.353 回答