Visual studio 2012 使用生成文件和生成定义生成和复制非Web应用程序
我目前正在使用TFS2012和VS2012技术构建和部署Web应用程序和非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
-使用MSBug和Team Foundation Budio书阅读微软构建引擎内部。
-阅读Stackoverflow、msdn和其他论坛以获得有关我的问题的帮助 不幸的是,我仍然面临着这个问题 当前设置: 我有一个:
- 名为ClassLib1.sln的解决方案
- 解决方案中的Build.proj文件
- 2解决方案中的项目:
- ClassLib1.csproj-非Web应用程序
- MvcApp1.csproj-Web应用程序
- 执行生成的生成服务器
- 生成Build.proj文件的生成定义(DefaultTemplate.11.1.xaml)
<?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将它们移动到正确的位置
希望这对其他人有所帮助。有关此案例的更多信息,请访问