Tfsbuild TFS构建2010+;从DROP引用DLL

Tfsbuild TFS构建2010+;从DROP引用DLL,tfsbuild,Tfsbuild,我正在寻找一些关于如何解决这个问题的帮助/想法。我有一个公共代码的解决方案,它是使用TFS(在线服务版本)构建(VS2010)构建的,并且在公共代码被修改时构建。我会有一个下拉结构,例如: 删除文件夹\u版本1.0.0.0 删除文件夹\u版本1.0.0.1 删除文件夹\u版本1.0.0.2 每次对公共代码进行更改时,最后一位数字不断递增。 然后,我有一些特定于客户端的代码,这些代码引用了一些常见的DLL。我想在TFS build中自动生成此代码,但不确定如何执行此操作。 1) 我曾想过创建一

我正在寻找一些关于如何解决这个问题的帮助/想法。我有一个公共代码的解决方案,它是使用TFS(在线服务版本)构建(VS2010)构建的,并且在公共代码被修改时构建。我会有一个下拉结构,例如:

删除文件夹\u版本1.0.0.0
删除文件夹\u版本1.0.0.1
删除文件夹\u版本1.0.0.2

每次对公共代码进行更改时,最后一位数字不断递增。

然后,我有一些特定于客户端的代码,这些代码引用了一些常见的DLL。我想在TFS build中自动生成此代码,但不确定如何执行此操作。

1) 我曾想过创建一个包含公共代码项目和特定于客户机的项目的主解决方案,但这不会改变我的公共代码的版本控制方式(每当我的公共代码TFS生成时,我使用TFS增加公共代码)。

2) 我曾想过从TFS Drop文件夹向公共代码添加一个引用路径,但由于该文件夹始终按顺序递增,因此每次生成特定于客户端的代码时,都需要有人手动更新该引用路径

我在想,也许可以创建一个副本,将每个常见的代码放置到一个普通的放置文件夹中,这样路径就会是静态的,但不知道如何做到这一点。或者如果其他人有好主意…

注意:这是使用Team Foundation服务,所以它都是在线的……/P>
任何帮助都将不胜感激

>P>我不太了解Team Foundation服务,但我希望您能够访问构建定义,并且您将能够自定义它。使特定于客户端的代码从根BIN文件夹中查找DLL

然后在构建定义中,在“GetWorkspace”活动之后。添加一个新的活动(从toobox CopyDirectory或InvokeProcess)将所有构建的DLL从您的droplocation复制到根bin文件夹。要确定最新版本,您可以创建一个自定义活动(编写c#代码),该活动将查看drop文件夹并确定最大的版本号。找到版本号后,将其设置为变量,然后CopyDirectory或InvokeProcess活动将使用该变量

CopyDirectory很简单,只需添加源位置和目标位置,就可以了。对于InvokeProcess,您可以输入“FileName=xcopy.exe”并填写正确的参数


有意义吗?

查看以下链接:


这就是我最终实现的解决方案。

是的,我一直在使用CopyDirectory,我认为这可以满足我的要求……除非它似乎不会覆盖根bin文件夹中已经存在的文件。我想我可以一直将整个放置位置复制到根文件夹。但是我看到文件没有被覆盖的问题-这是使用CopyDirectory。是否有一些特殊操作/命令/??为了覆盖现有的文件?我直到现在才知道。您可以使用InvokeProcess活动,使用“FileName=xcopy.exe”并传递特定参数。xcopy/y将覆盖现有文件夹/文件而不提示。我尝试调用进程执行:xcopy C:\a\Binaries\myfile.dll$/Dev/TestFolder/Y/R我在生成日志中看到一条记录,但没有文件复制到$/Dev/TestFolder。可能是托管服务器技术的一个怪癖…或者我的命令行中有一个小的输入错误。。。或者..???是的,我需要将文件从构建复制到服务器上的其他位置。第一个转到Drops/IterationX,而副本转到Drops/Latest。不确定SourcesDirectory会有什么帮助。。。请记住这是Team Foundation托管的服务,所以它都是在线的。“您想通过服务器将文件复制到服务器吗?”我指的是TFS SServer。当您用“$/DEV”来表示文件夹位置时,您是用TFS服务器位置来表示的。您可以将文件复制到附加位置,但需要根据服务器上的物理位置而不是TFS服务器来指定位置。由于两者都将指向droplocation,因此可以操作BuildDetail.droplocation属性并到达该位置。DropLocation\..\XCOPY最新版本只识别物理文件位置,所以不要在那里提到“$\Dev”等。