防止TFS生成定义源设置触发生成

防止TFS生成定义源设置触发生成,tfs,msbuild,tfsbuild,build-server,build-definition,Tfs,Msbuild,Tfsbuild,Build Server,Build Definition,创建生成定义时,我设置了一些源设置,示例如下: 问题是,当有人检查Builds或Install文件夹时,我希望它触发生成,但Includes文件夹只是它需要的一些库和其他项目。当这些库被更改时,我不希望它重新运行。但是,我需要在这里设置它们,以确保它们被复制到构建放置服务器。当有人签入此文件夹时,有没有一种方法可以在不强制生成触发器的情况下跨此包含文件夹进行复制?没有简单的方法可以做到这一点。正如您所发现的,源设置具有双重功能,它们定义下载的构建所需的文件集和触发CI的文件集 我认为这不是问题

创建生成定义时,我设置了一些源设置,示例如下:


问题是,当有人检查BuildsInstall文件夹时,我希望它触发生成,但Includes文件夹只是它需要的一些库和其他项目。当这些库被更改时,我不希望它重新运行。但是,我需要在这里设置它们,以确保它们被复制到构建放置服务器。当有人签入此文件夹时,有没有一种方法可以在不强制生成触发器的情况下跨此包含文件夹进行复制?

没有简单的方法可以做到这一点。正如您所发现的,源设置具有双重功能,它们定义下载的构建所需的文件集和触发CI的文件集


我认为这不是问题,如果在您的构建中使用了include,那么我希望在它们更改时启动新的构建,以确保更改不会破坏构建过程中的任何内容。

在签入include目录时使用特殊关键字
***\u NO\u CI***


要实现这一点,需要做两件事

首先,您需要将源文件夹置于以构建为中心的布局中,这将有助于尽可能消除重叠

如果您需要一个不应触发生成的特定共享文件夹,那么不要将其包含在源映射中,而是添加一个脚本,作为生成的早期部分将文件下载到您的工作区

该示例需要更新您的VisualStudio版本,您应该将sources目录传递给脚本

   REM %1 represents the Sources directory
   REM Compute variables
   SET TfExe="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe"
   REM SET TfExe="C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe"
   Set RefPath="$/TFS BUILDS/Shapes/Main/Includes"
   Set localPath="%~1\Includes"

   REM set the Drive Letter for this build
   Set Localdrive=%localPath:~1,2%
   %Localdrive%
   cd %1

   REM Map the folders 
   %TfExe% workfold /map %RefPath% %localPath%

   REM Get the required content
   %TfExe% get %RefPath%

   REM Unmap the folders 
   %TfExe% workfold /unmap %RefPath%

这是一个公平的观点,在大多数情况下,我也希望如此。问题是在我的特殊情况下,include用于另一个项目和这个项目,但是这个项目使用了一个几乎永远不会更改的第三方dll。但所有DLL都需要保存在此包含文件夹中。您可以在源设置中使用更具体的路径。不要映射整个includes文件夹,而只映射生成使用/需要的文件夹。如果/includes/文件夹只是第三方引用,为什么不将它们制作成NuGet包,并从需要它们的项目中引用它们?