Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 为什么一些Web.config转换被标记为SetParameters.xml,而另一些则不是?_Visual Studio 2010_Msbuild_Web Config_Msdeploy - Fatal编程技术网

Visual studio 2010 为什么一些Web.config转换被标记为SetParameters.xml,而另一些则不是?

Visual studio 2010 为什么一些Web.config转换被标记为SetParameters.xml,而另一些则不是?,visual-studio-2010,msbuild,web-config,msdeploy,Visual Studio 2010,Msbuild,Web Config,Msdeploy,最近我一直在VS2010中使用配置转换,但我不明白为什么有些转换直接应用于包中的Web.config,而其他转换则存储在SetParameters.xml中,然后应用于发布 例如,以具有以下连接字符串和应用程序设置的Web.config为例: <connectionStrings> <add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID

最近我一直在VS2010中使用配置转换,但我不明白为什么有些转换直接应用于包中的Web.config,而其他转换则存储在SetParameters.xml中,然后应用于发布

例如,以具有以下连接字符串和应用程序设置的Web.config为例:

<connectionStrings>
  <add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=Passw0rd"/>
</connectionStrings>
<appSettings>
  <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>

,我只是不清楚为什么它应用于某些设置而不是其他设置


有人能解释一下吗?

这实际上与配置转换无关。我刚刚在上发布了一个非常详细的博客。但是这里有一些信息给你


在Web发布管道(WPP)中,我们将连接字符串作为特殊工件处理。我们将自动为您创建所有连接字符串的参数。这是因为在许多情况下,当您部署应用程序时,您希望更改连接字符串。我们不会自动为任何AppSetting值创建参数。现在回到您的问题,为什么我们要标记连接字符串?我们这样做是为了确保您不会错过设置值,然后意外地让您的应用程序更新错误的数据库。我们通过为您创建这些参数来帮助您。如果需要,也可以禁用此行为。您可以将MSBuild属性AutoParameterizationWebConfigConnectionStrings设置为false。

关于部署,它们之间有一个显著的区别。将web包导入IIS时:

  • 连接字符串将自动包含在向导对话框中,以便进一步参数化
  • 默认情况下,应用程序设置将不存在如果您确实想这样做,请按照“自定义参数化-web.config文件中的应用程序设置”部分中的步骤进行操作
这种差异在开发人员和运营人员之间形成了责任界限。一方面,将目标环境的参数(数据库、缓存、AWS密钥/机密等)放入ops需要处理的连接字符串中。另一方面,您将不相关的选项放在“应用程序设置”部分,这样就可以减轻ops对特定产品和业务逻辑的负担


在我的公司里,一个运营人员通常负责多种产品。你真的不能要求他们像你一样了解产品知识。他们需要关注的事情越少,生活就会越幸福

如果有一种简单的方法(通过MSBuild属性)也能以这种方式处理应用程序设置(特定设置或整个设置),那么它将非常有用。e、 AutoParameterizationAppSettings=true。这篇文章很好地定义了一种解决我的问题的方法:但是为什么有人想要这个呢?
<connectionStrings>
  <add xdt:Transform="Replace" xdt:Locator="Match(name)" name="AutoDeployDb" connectionString="Data Source=MyDevServer;Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=s*#@Kdsl" />
</connectionStrings>
<appSettings>
  <add xdt:Transform="Replace" xdt:Locator="Match(key)" key="ChartImageHandler" value="storage=file;timeout=20;dir=d:\inetpub\AutoDeploy\TempImageFiles\"/>
</appSettings>