我在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
选项,所以我怀疑我必须使用它,但我不明白如何告诉它{ {1}}属于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>
在TFS中,我为relase设置了变量
public BlogsPostsContext() : base(WebConfigurationManager.AppSettings["ConnectionString"]) { }
不幸的是,当我发布并查看服务器上的Name | Value
ConnectionString | Data Source=WIN-7ADV5BGRBE3\SQLEXPRESS;Initial Catalog=BlogsPostsDb;Integrated Security=True
时,我只能看到web.config
而<add key="ConnectionString" value="__CONNECTIONSTRING__" />
:
parameters.xml
MsBuild参数:
<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>
答案 0 :(得分:0)
构建Web应用程序项目时会生成[project name].SetParameters.xml
文件。
这为
MSDeploy.exe
命令提供了一组参数值。 您可以更新此文件中的值,并将其作为a传递给Web Deploy 部署Web包时的命令行参数。
由于SetParameters.xml
文件是从您的Web应用程序项目文件和项目中的任何配置文件动态生成的。
您还可以通过向项目添加parameters.xml
文件来参数化其他设置。下面的条目使用XML路径语言(XPath)查询来定位和参数化web.config文件中 ContactService Windows Communication Foundation(WCF)服务的端点URL。
<parameters>
<parameter name="ContactService Service Endpoint Address"
description="Specify the endpoint URL for the ContactService WCF
service in the destination environment"
defaultValue="http://localhost/ContactManagerService">
<parameterEntry kind="XmlFile" scope="Web.config"
match="/configuration/system.serviceModel/client
/endpoint[@name='BasicHttpBinding_IContactService']
/@address" />
</parameter>
</parameters>
WPP还会在SetParameters.xml文件中添加一个与部署包一起生成的相应条目。
<parameters>
...
<setParameter
name="ContactService Service Endpoint Address"
value="http://localhost/ContactManagerService" />
...
</parameters>
如何告诉它Web.config中的哪个参数属于parameters.xml中的参数,您需要使用匹配条目来执行此操作。更多详细信息请参阅本教程:Configuring Parameters for Web Package Deployment
答案 1 :(得分:0)
我有类似的问题,我在Visual Studio中使用ASP.Net和IIS应用程序我创建了一个配置,例如Test for any cpu然后我发布了一个名为test.pubxml的IIS文件(右击项目点击发布),该文件将包含来自web.config文件的连接字符串,然后右键单击您创建的文件(test.pubxml)并选择添加Web转换文件添加以下您想要的内容转换连接字符串。
<connectionStrings>
<add name="test" connectionString="Data Source=(localdb)\MSSQLLocalDB;InitialCatalog=BlogsPostsLocalDb;Integrated Security=true;" xdt:Transform="SetAttributes(connectionString)" xdt:Locator="Match(name)" />
</connectionStrings>
现在你有一个与parameters.xml文件完全相同的文件。
在构建定义中,将以下内容添加到ms参数
/p:DeployOnBuild=true;PublishProfile=test.pubxml;Configuration=Test;
那将构建一个.zip包,
在您的版本定义中
在部署步骤中,将以下内容添加到Web部署参数文件输入
路径/路径/ test.SetParameters.xml
将使用已转换的连接字符串部署网站。
我知道很多,但你可以关注这个博客真的很有帮助Colin
答案 2 :(得分:0)
以下有关parameters.xml
误导我的文章。事实证明,我必须做的就是遵循Web.Release.Config
中的指示。
这是我在Web.config
内添加的内容:
<connectionStrings>
<add name="BlogsPostsDb"
providerName="System.Data.SqlClient"
connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=BlogsPostsTestDb;Integrated Security=True"/>
</connectionStrings>
这就是我在Web.Release.Config
中添加的内容:
<connectionStrings>
<add name="BlogsPostsDb"
connectionString="Data Source=myServerInstance;Initial Catalog=BlogsPostsDb;User ID=*********;Password=******;"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
现在有道理。只要两个配置中的名称匹配,它们就会被替换。我还必须告诉我的上下文我想要使用哪个连接字符串:
public BlogsPostsContext() : base("BlogsPostsDb") { }