连接字符串的TFS变量

问题描述:

我在tfs项目中持续集成。我想在发布时将连接字符串替换为我的制作数据库,但网络上的所有信息都令人困惑。我创建parameters.xml这个:连接字符串的TFS变量

<?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)\\" 

enter image description here

+0

您使用了哪个任务来用变量替换连接字符串?你可以分享该任务设置的屏幕截图吗? –

+0

@MSFT我更新了我的问题。 – FCin

+0

您可以展开“文件转换和可变取代选项”设置,然后分享截图吗? –

下面的文章。事实证明,我所要做的就是按照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") { } 

A [project name].SetParameters.xml当您构建Web应用程序项目时会生成文件。

这提供了一组参数值给MSDeploy.exe命令。 当您部署Web软件包时,您可以更新此文件中的值并将其作为 命令行参数传递给Web Deploy。

由于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

+0

我用一个程序来生成文件。问题是从tfs链接变量到我的配置不起作用。我更新了我的问题。 – FCin

我有一个类似的问题,我在Visual Studio中使用ASP.Net和IIS应用程序我创建了一个配置例如测试任何CPU然后我发布一个名为测试的IIS文件。 pubxml(右键单击项目点击发布),该文件将包含来自web.config文件的连接字符串,然后右键单击您创建的文件(test.pubxml)并选择添加web转换文件 add下面的iy你想转换连接字符串。

<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文件完全相同的功能。

在构建defition以下添加到MS参数

/p:DeployOnBuild=true;PublishProfile=test.pubxml;Configuration=Test;

,将建立一个.zip包,

在你发布定义

在你部署的步骤,以下内容添加到您的Web部署参数文件输入

路径/Path/test.SetParameters.xml

这将使用转换的连接字符串部署网站。

我知道它的很多,但你可以按照有关parameters.xml误导我这个博客的真正的帮助Colin