我目前正在使用TFS2012和VS2012技术来构建和部署Web应用程序和非Web应用程序。
进行了研究:
- 阅读Microsoft Build Engine内部,使用MSBuild和Team Foundation Build书
- 阅读Stackoverflow,msdn和其他论坛以获取有关我的问题的帮助。
不幸的是,我仍然面临着这个问题。
当前设置:
我有一个:
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 文件。
我尝试了很多东西,到目前为止没有任何效果(除了手动操作)。
请注意我对此有些陌生,因此可能很容易错过理解或错过的东西。
答案 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不允许我直接复制二进制文件的构建位置,所以我将它们输出到同一服务器上的另一个文件夹中,然后使用复制目标将它们移动到正确的位置。
希望这有助于其他人。