Visual studio 2012 使用生成文件和生成定义生成和复制非Web应用程序

Visual studio 2012 使用生成文件和生成定义生成和复制非Web应用程序,visual-studio-2012,msbuild,tfsbuild,Visual Studio 2012,Msbuild,Tfsbuild,我目前正在使用TFS2012和VS2012技术构建和部署Web应用程序和非Web应用程序 开展的研究: -使用MSBug和Team Foundation Budio书阅读微软构建引擎内部。 -阅读Stackoverflow、msdn和其他论坛以获得有关我的问题的帮助 不幸的是,我仍然面临着这个问题 当前设置: 我有一个: 名为ClassLib1.sln的解决方案 解决方案中的Build.proj文件 2解决方案中的项目: ClassLib1.csproj-非Web应用程序 MvcApp1.c

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

开展的研究:
-使用MSBug和Team Foundation Budio书阅读微软构建引擎内部。
-阅读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>  

OutputPath=$(MSBuildProjectDirectory)\build\test\ClassLib1\MvcApp1\;
UseWPP_CopyWebApplication=true;
PipelineDependsOnBuild=false;
SkipInValidConfiguration=true;
DeployOnBuild=true;
DeployTarget=PipelinePreDeployyCopyallFilesTooneFolder;
AutoParameterizationWebConfigConnectionStrings=false;
_PackageTempDir=\\server\build\test\MvcApp1
OutputPath=\\server\build\test\ClassLib1\
什么有效:

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

手头的问题:

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

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


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

经过一点尝试和错误,我已设法解决了这个问题

对于非web应用,我已将ItemGroup修改为包含:

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

OutputPath=$(MSBuildProjectDirectory)\Environmen\Solution.FolderName.ProjectName;OutDir=C:\CustomBinariesOutDir\Environment\App\
我已经创建了一个复制目标

<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不允许我直接从生成二进制文件的位置进行复制,所以我将它们输出到同一服务器上的另一个文件夹中,然后使用copy target将它们移动到正确的位置


希望这对其他人有所帮助。

有关此案例的更多信息,请访问