我希望我能够很好地解释这一点。我试图使用Web.Config转换来维护跨越各种平台的连接字符串中的数据源。我让它工作到web.release.config通过构建过程更新的程度(即它在测试时更改为测试服务器,然后在开发人员的dev服务器) - 但是我无法将此web.release.config更改为实际上更新了web.config。
我已经按照几个教程来完成这个词,而我(我想)已经将问题归结为构建定义 - >过程 - > 2.构建 - > Confirgurations。所有教程都说要放置"任何CPU / Release"那...当我这样做时,我的构建失败,说它无法在构建文件夹中找到_PublishedSites文件夹(或部署者用户没有访问权限 - 但是我认为它是前者,因为这个_PublishedSites文件夹不存在于构建中失败。
但是,如果我只删除构建配置中的值,那么它构建时没有错误,但只有web.release.config文件使用变量更新。
是否还有其他人克服了这个问题...我想我可以更新web.config而不是web.release.config - 但是我不想在调试和构建之间切换时不得不在连接字符串之间切换。 / p>
- ***********在我的问题上为Clarity编辑***********
为了澄清我想要做的事情 - 我已使用以下内容设置 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 - 包括DataSource的tokanized占位符。这意味着,当web.config到达RM(发布管理)时,新的web.config将具有
Data Source=__ConnString__
替换为RM组件中的变量 - e.i.用于开发阶段的测试阶段和开发服务器的测试服务器等。
我的构建定义被配置为构建到Drop文件夹,在Process区域下我有以下设置:
然而,当我尝试通过RM构建时,我得到错误: 这是正确的,因为构建还没有创建_PublishedWebsites文件夹。这似乎与构建定义 2,Build - &gt;中的值有关。 2,Configurations =任何CPU / Release 因为如果我把它拿出来 - 它会构建但是web.config不会使用来自web.release.config的标记化信息进行更新。
我希望这有助于更好地说明我的问题...我已经在网上找到了一些这样的例子似乎正在起作用但是我的结局不能解决问题!
答案 0 :(得分:3)
Web.config转换并不真正与Release Management范例一起使用。
问题很简单:根据您构建的配置,在构建时发生Web.config转换。这意味着您必须为每个配置构建,以便触发转换。
这是发布管理功能的根本不兼容的方法。 RM基于 one build ,然后通过环境管道发布(并测试!)。这意味着您只有一次机会执行配置转换。
基于代理的RM功能基于配置文件标记化和令牌替换的思想。我成功做的是使用配置转换来插入令牌,然后使用RM来替换每个环境。
所以,假设您的web.config看起来像这样:
<connectionString name="myApp" value="SomeLocalConnectionString">
您设置了配置转换,将SomeLocalConnectionString
替换为令牌:
<connectionString name="myApp" value="__ConnectionString__">
然后,在配置发行版时,使用RM组件的“配置变量”部分指定它应该在web.config文件中查找并找到ConnectionString
令牌。对于您使用该组件的发布模板中的每个阶段,您可以指定一个具体值,然后在实际发布过程中设置该值。
答案 1 :(得分:0)
转换与rm一起使用。它为什么如此重要 ?假设您有一个qa web.config,它有一个跟踪标记,您希望从生产中完全删除它,因为您需要较少的详细程度。你不能使用占位符来删除整个标签或添加它们,转换是唯一能为你做这件事的技术,以防你不想自己为Visual Studio写一个插件......
但rm发布模板中存在一些与转换相关的错误,我不得不自己调查此问题,因为没有人会知道该怎么做。
确定将配置设置为发布是关闭rm,确保您的发布模板已更新且仅为 - ReleaseTfvcTemplate.12.xaml。
ms构建参数 - / p:PublishProfile = YourPublishProfileName / p:DeployOnBuild = true / p:UseWPP_CopyWebApplication = true / p:OutputPath = bin \ Release(将此设置为未设置输出路径的错误) 设置发布配置文件以在rm干预之前为两个配置构建两个版本,因为/ p:UseWPP_CopyWebApplication = true与事物的顺序混杂。
根据需要将构建部分(构建定义中的第2个)设置为尽可能多的配置 任何CPU | QA,任何CPU |发布
你可以构建1个.csproj,使用2个或更多配置没问题。
在要发布的配置中(在构建定义中的第6部分)仅设置链中的最后一个配置(任何CPU |发布),如果你不是RM将无理由地释放两次相同的构建(如果你有3个配置等。)
确保使用有效签到TFS发布配置文件(右键单击网站 - 发布,设置所需的发布设置,即预编译\编译\发送调试等)发布配置文件应该是一个单词的名称(或者它会通过一个例外,你使用多个发布配置文件),这很好,因为在发布配置文件中,你可以做任何你想要的发布,甚至保持与前编译网站的兼容性手动部署,包括pdb,如果你喜欢这样(非常强大的选项)。
这是关于它,你可以使用几乎相同的配置为Windows服务(app.config)使用慢速猎豹与msbuild参数,如: / p:OutputPath = bin \ Release / p:DebugSymbols = true