我有一个解决方案,我用于TFS 2010(构建服务器)的构建任务。
大多数项目都可以在同一个位置结束,唯一不同的是一些动态加载的插件,它们应该在/ Plugins子文件夹中相对于其他程序集。
1)我尝试过一些东西,比如修改我的DefaultTemplate.xaml,但却发现,(因为我只指定了.sln文件)我无法区分每个项目级别的输出路径。 (在工作流程中,有一个“BuildSettings.ProjectsToBuild中的每个项目”和一个serverBuildProjectItem变量 - 只有.sln文件作为我的项目才调用一次。)所以这不能区分每个项目基础。
2)我尝试的另一件事是将OutputPath指定为某处作为解决方案。
<OutputPath Condition=" '$(CommonOutputPath)'=='' ">../myOutDir/Plugins/</OutputPath>
<OutputPath Condition=" '$(CommonOutputPath)'!='' ">$(CommonOutputPath)Plugins\</OutputPath>
这使得所有程序集都保留在服务器构建的同一文件夹中,因此不起作用。
3)我开始创建一个post-build事件来手动将文件复制到正确的位置,但到目前为止无法区分服务器案例和本地案例。 (这在这里不起作用。)
<PropertyGroup Condition=" ' $(TeamBuildConstants) ' == ' '>
<PostBuildEvent>mkdir $(SolutionDir)..\out\$(OutDir)plugins
copy $(TargetPath) $(SolutionDir)..\out\$(OutDir)plugins
</PropertyGroup>
<PropertyGroup Condition=" ' $(TeamBuildConstants) ' == '_TEAM_BUILD_ '>
echo figure out some copying for this once the condition gets hit..
<PostBuildEvent></PostBuildEvent>
</PropertyGroup>
如何更改项目文件或配置构建工作流程以使其工作? (然后应该在本地以及服务器构建中工作。)
我想要的: 将所有标准程序集放在同一个文件夹中,将所有插件项目放在./Plugins/子文件夹中吗? (本地,相对于项目文件(默认?),tfs-build相对于指定的放置位置)
答案 0 :(得分:1)
从2010年推出基于工作流程的tfs构建版本,他们与msbuild之间存在很大的区别 - 使用msbuild编译项目及其内容,使用工作流程组装deplopyment包。
由于您声明这应该运行localy,这意味着编译需要插件才能成功/项目工作,因此应该在解决方案级别处理它们。
您可以使用几种方法
在tfs中构建(在VS之外)
<PostBuildEvent>
IF NOT "$(BuildingInsideVisualStudio)" == "true" ( YourActions )
</PostBuildEvent>