【发布时间】:2016-02-26 15:53:00
【问题描述】:
我希望我能很好地解释这一点。我正在尝试使用 Web.Config 转换来跨各种平台维护我的连接字符串中的数据源。我让它工作到 web.release.config 通过构建过程更新(即它在测试时更改为测试服务器,然后在开发时更改为开发服务器) - 但是我无法让这个 web.release.config 到实际更新 web.config。
我已经按照几个教程来学习这个词,并且我(我想我)已经将问题归结为构建定义 --> 过程 --> 2. 构建 --> 配置。所有教程都说将“任何 CPU / 版本”放在那里...但是当我这样做时,我的构建失败,说明它无法在构建文件夹中找到 _PublishedSites 文件夹(或者部署用户无权访问 - 但是我认为它是前者,因为对于失败的构建,此 _PublishedSites 文件夹不存在。
但是,如果我只是删除构建配置中的值,那么它构建时不会出现错误,但只有 web.release.config 文件会使用变量进行更新。
有没有其他人解决过这个问题...我想我可以只更新 web.config 而不是 web.release.config - 但是我不想在调试和构建之间切换时必须在连接字符串之间切换。
-- *********** 为明确我的问题而编辑 ***********
为了澄清我想要做什么 - 我已经设置了 web.release.config 与以下内容:
<connectionStrings>
<add name="IRISConnectionString"
connectionString="Data Source=__ConnString__; Initial Catalog=..."
providerName="System.Data.SqlClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
因此,在最初构建项目时 - web.config 会使用上述内容进行更新 - 包括数据源的标记化占位符。这意味着当 web.config 到达 RM(发布管理)时,新的 web.config 将拥有
Data Source=__ConnString__
替换为来自 RM 组件的变量 - e.i.测试阶段的测试服务器和开发阶段的开发服务器等。
我的构建定义配置为构建到放置文件夹,并且在流程区域下我有以下设置:
但是,当我尝试通过 RM 构建时,我得到了错误: 这是真的,因为构建还没有创建 _PublishedWebsites 文件夹。这似乎与 Build Definition 2, Build --> 2, Configurations = Any CPU/Release 中的值有关,因为如果我把它拿出来 - 它会构建但 web.config 会未使用来自 web.release.config 的标记化信息进行更新。
我希望这有助于更好地说明我的问题...我在网上找到了一些似乎可行但无法解决问题的示例!
【问题讨论】:
-
您使用的是 TFS 发布管理还是仅使用 TFS 构建?
-
TFS MS 发布管理 - 因此构建在发布管理中进行控制。
-
构建应该触发 TFS 发布管理(不是其他方式);在发布到各个阶段时,您应该应用不同的配置文件。
-
是的,我认为这意味着工作的方式是 web.release.config 文件包含令牌值(两边都有双下划线)。因此,在构建项目时,web.config 中的连接字符串将替换为 release.config 值 - 令牌值。因此,当 web.config 到达 RM 时,它包含标记化的占位符。然后,当 RM 选择它时,它会应用组件中的变量并完成工作。这在理论上都是有道理的,但在应用到实践时却遇到了这个奇怪的错误。
标签: tfs release-management ms-release-management web.config-transform