连接字符串的TFS变量

时间:2017-09-03 10:12:57

标签: asp.net entity-framework tfs connection-string web-deployment

我在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>

enter image description here

3 个答案:

答案 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") { }