ASP.NET MVC在发布到服务器时会自动更改连接字符串。

36 浏览
0 Comments

ASP.NET MVC在发布到服务器时会自动更改连接字符串。

在我的ASP.NET应用程序中,根据运行的环境(开发或生产环境),我需要使用不同的数据库连接字符串和SMTP服务器地址。

应用程序通过WebConfigurationManager.AppSettings属性从Web.config文件中读取设置。

我使用构建/发布命令通过FTP将应用程序部署到生产服务器,然后手动替换远程的Web.config文件。

有没有办法简化部署的过程?谢谢!

0
0 Comments

ASP.NET MVC自动更改连接字符串以便在发布到服务器时的原因是可以通过应用转换来修改web.config文件。当创建web.config文件时,可以在解决方案资源管理器中展开该文件,可以看到两个文件:

  • Web.Debug.Config
  • Web.Release.Config

它们包含可以用于的转换代码:

  • 更改连接字符串
  • 删除调试追踪和设置
  • 注册错误页面

有关更多信息,请参见MSDN上的Web应用程序项目部署的Web.config转换语法

虽然官方不支持,但也可以将相同类型的转换应用于非Web应用程序的app.config文件。有关如何修改项目文件以添加新任务到msbuild的详细信息,请参见Phil Bolduc的博客

这是Visual Studio Uservoice上的一个长期要求

Visual Studio 2010及更高版本提供了一个名为"SlowCheetah"的扩展,用于为任何配置文件创建转换。从Visual Studio 2017.3开始,SlowCheetah已集成到IDE中,并由Microsoft管理代码库。此新版本还支持JSON转换。

请注意,这对于旧的Web站点项目不起作用,只适用于Web应用程序。我没有尝试过Phil Bolduc的解决方法是否适用于Web站点,但我怀疑不适用,因为它们没有项目文件。

还请注意,Web.config转换仅适用于发布,如果只是构建/运行F5,则不起作用。

如果您的web.config文件不包含Web.Debug.ConfigWeb.Release.Config,您可能需要右键单击Web.Config并点击Add Config Transforms

:我们如何在普通构建/ F5中使用它?

这正是SlowCheetah所做的。

你不能。

SlowCheetah的直接链接:marketplace.visualstudio.com/…

非常好,谢谢!

0
0 Comments

问题的原因是在发布ASP.NET MVC应用程序到服务器时,连接字符串没有自动更改。解决方法是使用web deployment projects或使用VS "Publishing Profiles"来自动更改连接字符串。

web deployment projects是一种在发布ASP.NET应用程序时自定义部署过程的工具。它允许开发人员在发布应用程序之前对文件进行处理,包括更改连接字符串。可以从微软的官方网站上下载web deployment projects,并按照指南进行使用。

另一个解决方法是使用VS "Publishing Profiles"。在Visual Studio 2012及更高版本中,web deployment projects已经被Publishing Profiles所取代。发布配置文件是一种包含应用程序发布设置的XML文件。其中一个设置就是连接字符串。通过编辑发布配置文件,开发人员可以在发布应用程序时自动更改连接字符串。

以上是解决ASP.NET MVC应用程序在发布到服务器时连接字符串没有自动更改的两种方法。开发人员可以根据自己的需求选择其中一种方法来实现自动更改连接字符串的功能。

0
0 Comments

ASP.NET MVC在发布到服务器时自动更改连接字符串的问题出现的原因是使用了<appSettings>标签的file属性来加载一个具有自己一组键/值的外部配置文件。这些配置文件将覆盖web.config中的任何设置或添加到它们中。

解决方法是在安装时使用与站点要安装到的环境匹配的file属性修改web.config。可以使用安装程序中的开关来实现这一点。例如:

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">
<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">
<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

注意:

  • 对属性指定的.config文件的更改不会触发ASP.NET工作进程的重启。

这是一个很好的解决方案,特别是当你有大量的环境,并且某些环境的某些设置包含密码等信息,你不希望这些信息被跟踪在源代码控制中。

是否有一种动态的方法来改变文件路径?根据你所在的服务器?只是个小问题,这在一个旧的网站项目上运行,而不是一个Web应用程序。谢谢!

有一个restartOnExternalChanges属性,它将把这些文件视为web.config文件。来源:learnable.com/books/...

0