Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用令牌文件处理TFS 2013 app.config的版本管理器_Tfs_Ms Release Management - Fatal编程技术网

使用令牌文件处理TFS 2013 app.config的版本管理器

使用令牌文件处理TFS 2013 app.config的版本管理器,tfs,ms-release-management,Tfs,Ms Release Management,我似乎在处理app.config和令牌文件时遇到了很多麻烦,我们使用的是旧的.11模板 看起来当前正在使用ReleaseTfCvcTemplate.12.xaml,这是在构建之后运行标记化 虽然我可以通过故意将.token文件复制到我的输出文件夹中,使app.config/myapp.exe.config文件正常工作,但递归搜索会发现它,这感觉非常可怕 作为修复,我尝试将第182-230行移动到第175行的RunMSBuild任务之前,在该点创建一个新序列 这是正确的方法,还是我遗漏了一些文档或

我似乎在处理app.config和令牌文件时遇到了很多麻烦,我们使用的是旧的.11模板

看起来当前正在使用ReleaseTfCvcTemplate.12.xaml,这是在构建之后运行标记化

虽然我可以通过故意将.token文件复制到我的输出文件夹中,使app.config/myapp.exe.config文件正常工作,但递归搜索会发现它,这感觉非常可怕

作为修复,我尝试将第182-230行移动到第175行的RunMSBuild任务之前,在该点创建一个新序列


这是正确的方法,还是我遗漏了一些文档或模板的更高版本?

使用版本管理替换配置文件中的变量发生在部署时,而不是编译时


RM部署应用程序时,会插入正确的变量。

听起来您遇到了两个问题之一:

您需要在项目中包含.token文件,并确保将其设置为“始终复制”,以便将其复制到生成输出文件夹

如果您正在构建一个web应用程序,我在发布构建过程模板中看到了一个bug,它不涉及_PublishedWebsites文件夹的内容。我不知道它是否在更新4中得到了修复,但在早期版本中它肯定仍然是一个问题


谢谢大家。。。无论如何,为了将来的参考,我做了改变

然而,我误解了事情发生的顺序的确切性质,如下所示:

使项目脱离源代码管理 使用msbuild生成 将.config.token文件复制到.config文件上。这在TFS模板中 作为部署到服务器的一部分,.config文件中的令牌条目将被替换。这在发布管理器模板中。 测试在msbuild二进制输出文件夹中运行。 问题是,如果您使用的项目类型使用app.config文件,并且msbuild进程在msbuild阶段重命名这些output.exe.config,那么这实际上不起作用,因此您需要创建一个标记为copy to output的output.exe.config和一个output.exe.config.token,以便在后期部署是最终输出时进行配置正确地如果您想标记一些mstest DLL,这也是一个问题,因为它们通常也使用app.config。基本上,这有点混乱,除非您使用的是web.config

我们通过使用我上面建议的修改来解决这个问题,您需要在第175行创建一个序列,并将第178-230行向上移动到序列中,这是GetBuildDirectory变量位和if语句,随后添加了一个额外的部署阶段,该阶段使用新的标记化文件复制回构建服务器,以便mstest可以针对它们运行

因此,我们的新流程如下所示:

使项目脱离源代码管理 在.config文件上复制.config.token文件,即在app.config上复制app.config.token 使用msbuild构建这意味着我们最终使用标记化的myapp.exe.config和mytests.dll.config 作为部署到服务器的一部分,.config文件中的令牌条目将被替换。这是发布模板中的发布管理步骤。 将测试部署回build server上的文件夹。在部署release manager的更新4之前,此文件夹必须是固定文件夹。替换.config文件中的令牌项,以便我们的集成测试可以使用新部署的服务器。这是发布模板中的发布管理步骤。 测试在生成服务器上的固定文件夹中运行,而不是在msbuild输出目录中运行,因此需要在tfs生成模板中更改测试通配符。
最后请注意,我们不使用build directory变量,它保留为空白。我不相信如果将其设置为某个值,这会起作用…

根据我的经验,这是发行版构建模板中一个已知的、持续存在的问题:在某些情况下不会发生.token文件的交换。例如,如果您构建一个网站,则输出将转到_PublishedWebsites/WebAppName/。不会将令牌文件交换到该文件夹中。如果没有首先将.token文件复制到生成输出文件夹,也不会发生这种情况。@Peterl我遇到的问题与您遇到的完全相同。您是否找到了更好的解决方案,或者修改ReleaseTfCvcTemplate.12.xaml仍然是您的最佳选择?寻找一个简单的解决方案,但我更喜欢保持构建的模板不变…@PeterI您是否能够通过创建application.exe.config和application.exe.config.token文件来处理令牌处理,或者您是否还必须自定义releaseTemplate以使其正常工作?我只是想正确标记app.config文件。从内存中,您只需创建一个application.exe.config并将其标记为copy to output即可。如果您想要tokenis,则不适用于测试 以与部署后运行测试相同的方式重新部署它们,因此最好将它们部署回固定文件夹。