【发布时间】:2017-09-03 10:12:56
【问题描述】:
我在 tfs 项目中持续集成。我想在发布时将连接字符串替换为我的生产数据库,但网络上的所有信息都令人困惑。我用这个创建了parameters.xml:
<?xml version="1.0" encoding="utf-8" ?>
<parameters>
<parameter name="connectionString" description="connectionString" defaultvalue="(localdb)\MSSQLLocalDB;InitialCatalog=BlogsPostsLocalDb;Integrated Security=true;" tags="">
<parameterentry kind="XmlFile" scope="\\web.config$" match="What to write here?" />
</parameter>
</parameters>
在 TFS 中,在我的App Deploy 任务中我可以看到SetParameters File 选项,所以我怀疑我必须使用它,但我不明白如何告诉它Web.config 中的哪个参数属于该参数在parameters.xml。
在我的Web.config 中,我需要将静态路径替换为parameters.xml 中的路径。我的Web.config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=(localdb)\MSSQLLocalDB;InitialCatalog=BlogsPostsLocalDb;Integrated Security=true;" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
编辑:
我使用一个工具创建了parameters.xml,现在看起来像这样:
<parameters>
<parameter name="ConnectionString" description="Description for ConnectionString" defaultvalue="__CONNECTIONSTRING__" tags="">
<parameterentry kind="XmlFile" scope="\\web.config$" match="/configuration/appSettings/add[@key='ConnectionString']/@value" />
</parameter>
</parameters>
我的web.config:
<appSettings>
<add key="ConnectionString" value="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=BlogsPostsTestDb;Integrated Security=True" />
</appSettings>
在我的上下文中,我这样做:
public BlogsPostsContext() : base(WebConfigurationManager.AppSettings["ConnectionString"]) { }
在 TFS 中我为 relase 设置变量
Name | Value
ConnectionString | Data Source=WIN-7ADV5BGRBE3\SQLEXPRESS;Initial Catalog=BlogsPostsDb;Integrated Security=True
不幸的是,当我发布并查看服务器上的web.config 时,我只能看到<add key="ConnectionString" value="__CONNECTIONSTRING__" />
还有parameters.xml:
<parameters>
<parameter name="ConnectionString" description="Description for ConnectionString" defaultvalue="__CONNECTIONSTRING__" tags="">
<parameterentry kind="XmlFile" scope="\\web.config$" match="/configuration/appSettings/add[@key='ConnectionString']/@value" />
</parameter>
</parameters>
MsBuild 参数:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"
【问题讨论】:
-
您使用哪个任务将连接字符串替换为变量?你能分享一下那个任务的设置截图吗?
-
@MSFT 我更新了我的问题。
-
能否展开“文件转换和变量替换选项”设置,然后分享截图?
-
@Eddie-MSFT 我更新了截图。
-
所以您使用“XML 变量替换”选项来替换连接字符串?您使用的 IIS Web 应用程序部署任务是预览版,非常旧,我再也找不到了。你可以分享扩展程序,以便我可以在我身边检查它吗?顺便说一句,该扩展已被弃用并替换为:marketplace.visualstudio.com/…,如果可能,我建议您尝试使用新的扩展。
标签: asp.net entity-framework tfs connection-string web-deployment