C# settings.settings连接开发与生产中的字符串

C# settings.settings连接开发与生产中的字符串,c#,visual-studio-2008,C#,Visual Studio 2008,我正在使用VisualStudio2008开发winforms应用程序 我的数据库连接字符串存储在settings.settings中 我的开发和生产环境需要不同的数据库登录凭据,现在我正在手动更改connectionstring,然后再为这两个不同的环境进行构建 有更好的解决办法吗?一个永恒的问题!:-) 基本上,现在微软并没有一个好的答案 我要做的是在我的设置文件中有两个连接字符串,在两个不同的名称下,然后在app.config中有一个配置设置,它告诉我使用哪一个: MyDatabaseDE

我正在使用VisualStudio2008开发winforms应用程序

我的数据库连接字符串存储在settings.settings中

我的开发和生产环境需要不同的数据库登录凭据,现在我正在手动更改connectionstring,然后再为这两个不同的环境进行构建

有更好的解决办法吗?

一个永恒的问题!:-)

基本上,现在微软并没有一个好的答案

我要做的是在我的设置文件中有两个连接字符串,在两个不同的名称下,然后在app.config中有一个配置设置,它告诉我使用哪一个:

MyDatabaseDEV = server=(local);database=mydatabase;-........
MyDatabasePROD = server=ProdServer;database=MyDatabase;........
和app.config中的

<appSettings>    
   <add key="UseDatabase" value="MyDatabaseDEV" />
</appSettings>


  • Marc

    您可以制作表单,要求用户输入连接参数,如服务器名称和数据库…,并将这些参数存储在注册表、文件等中。

    在我工作的地方,创建一个名为config的文件夹来保存各种配置

    source
     config
      MyProject
        environment1
        environment2
      MyProject2
        environment1
        environment2
    

    运行构建脚本时,它会根据您为哪个环境进行构建获取正确的配置…

    您应该向winform应用程序添加app.config文件。在此文件中,将连接字符串存储在ConnectionString部分下

    在代码中,创建连接时,使用ConfigurationManager类使用该连接字符串访问配置文件


    因此,当您部署应用程序时,您必须在配置文件中设置一次连接字符串,然后一切都按预期运行

    您可以在设置中定义连接,在调试模式下使用dev connection,或者使用带有#if指令的生产连接

    //affect your prod connection here
        #if DEBUG
           //re affect your dev connection here;
        #endif
    

    一个解释链接:

    在解决方案资源管理器中的网站上单击鼠标右键,然后选择“添加web部署项目”

    无论何时构建此新WDP项目,它都将替换您指定的所有配置元素。根据调试版本或发布版本的不同,您也可以有不同的版本。它适用于几乎所有的配置选项,包括连接字符串。有很多关于如何在网上正确配置它的文档,只需搜索“Web部署项目”


    这无疑是一种新的“默认”方式,直到微软决定在将来的.Net/Visual Studio版本中使其更加正式为止(如果有的话)。

    我已经开始使用一个名为TestMode=“dev | prod | uat”的设置

    编译目标的问题是,在构建之后不能更改任何内容

    使用这种方法,您可以包含所有所需环境的所有连接字符串和设置。在代码配置提供程序中,可以基于此设置进行切换

    使用这种方法,您所要做的就是在部署后更改标志,或者使用像Octopus这样的部署软件为您更改标志


    我已经放弃了合并.config文件,这既困难又容易出错。

    事实上,这是我们过去常做的事情。现在,我们使用我编写的一个应用程序来自动进行部署,并处理这个问题。但一般来说,构建后脚本是一种方法。在您有多个要部署的环境之前,这种方法是有效的……在我的工作中,我们有sit、uat、prod……这些链接似乎都是用于web应用程序的,而不是我正在处理的winforms。目前看来,您的解决方案最简单明了。