Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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
C# 管理调试和释放连接字符串_C#_Asp.net_Vb.net_Connection String - Fatal编程技术网

C# 管理调试和释放连接字符串

C# 管理调试和释放连接字符串,c#,asp.net,vb.net,connection-string,C#,Asp.net,Vb.net,Connection String,在.NET/SQLServer应用程序中管理调试和发布连接字符串的好方法是什么 我有两个SQL Server,一个生产服务器和一个构建/调试服务器,我需要在部署ASP.NET应用程序时在这两个服务器之间切换的方法 目前,我只是将它们存储在web.config中,并注释其中一个,但在部署时很容易出错。我通常在生产服务器上设置一个环境变量,表示该服务器是生产服务器。然后,我根据此环境变量是否存在并设置为生产值,从web.config中读取正确的连接字符串。这可能有点过时,但解决了这个问题-我仍然严格

在.NET/SQLServer应用程序中管理调试和发布连接字符串的好方法是什么

我有两个SQL Server,一个生产服务器和一个构建/调试服务器,我需要在部署ASP.NET应用程序时在这两个服务器之间切换的方法


目前,我只是将它们存储在web.config中,并注释其中一个,但在部署时很容易出错。

我通常在生产服务器上设置一个环境变量,表示该服务器是生产服务器。然后,我根据此环境变量是否存在并设置为生产值,从web.config中读取正确的连接字符串。

这可能有点过时,但解决了这个问题-我仍然严格使用DNS设置来区分生产环境和调试环境


p、 在美国,我预计会有大量的反对票,也许这将是人们对数据库标识符间接寻址级别的一个衡量标准。

好消息是.NET4就这点而言,您可以为每个配置分别配置web.Release.config、web.Debug.config


坏消息是。。。您可能还没有使用它。

创建Web.config文件的调试和发布版本,例如Web.Debug.config和Web.Release.config。然后添加一个预编译条件,根据当前目标将相关版本复制到web.config中

编辑:要添加预编译条件,请右键单击项目并选择“属性”,然后转到“生成事件”选项卡,并将下面的代码添加到预编译条件。显然,您必须根据自己的需要修改代码,请参见下图

@echo off

echo Configuring web.config pre-build event ...

if exist "$(ProjectDir)web.config" del /F / Q "$(ProjectDir)web.config"

if "$(ConfigurationName)" == "Debug Test" goto test
if "$(ConfigurationName)" == "Debug M" goto M
if "$(ConfigurationName)" == "Debug BA" goto BA
if "$(ConfigurationName)" == "Release Test" goto test
if "$(ConfigurationName)" == "Release M" goto M
if "$(ConfigurationName)" == "Release BA" goto BA

echo No web.config found for configuration $(ConfigurationName). Abort batch.
exit -1
goto :end

:test
copy /Y "$(ProjectDir)web.config.test" "$(ProjectDir)web.config"
GOTO end

:BA
copy /Y "$(ProjectDir)web.config.BA" "$(ProjectDir)web.config"
GOTO end

:M
copy /Y "$(ProjectDir)web.config.M" "$(ProjectDir)web.config"
GOTO end

:end
echo Pre-build event finished

使用预处理器指令:将项目配置为在调试模式下运行时,将选择调试连接字符串,否则将自动选择发布连接字符串

在VisualStudio中,您会注意到,语句仅根据项目配置调试或发布而变暗

只需在代码中添加以下内容:

string myConnectionString;
#if DEBUG
     myConnectionString = "your debug connection string";//may be read from your debug connection string from the config file
#else
     myConnectionString = "your release connection string"; //may be read from your relase connection string from the config file
#endif

有关更多详细信息,请查看。

我在.NET3.5中结合使用了Sameh和Obalix的方法

    public static class DataConnection
{
#if LOCALDEV
    public const string Env = "Debug";
#endif
#if STAGING
    public const string Env="Staging";
#endif
#if RELEASE
    public const string Env="Release";
#endif
    private static ConnectionStringSettingsCollection _connections;
    static DataConnection()
    {
        _connections = ConfigurationManager.ConnectionStrings;

    }

    public static string BoloConnectionString
    {
        get
        {
            return _connections["DB1."+Env].ConnectionString;
        }
    }
    public static string AOAConnectionString
    {
        get
        {
            return _connections["DB2."+Env].ConnectionString;
        }
    }
    public static string DocVueConnectionString
    {
        get
        {
            return _connections["DB3."+Env].ConnectionString;
        }
    }
}

然后在我的项目属性中,我定义了正确的条件编译符号。这样,我就不必像Sameh那样对连接字符串进行硬编码,但代码只根据字符串的构建方式查找字符串。这样,如果需要为所有构建创建一个配置文件,我就有了一个配置文件,但实际上我并没有在构建过程中部署配置文件。尽管.net 4的有条件app.Relase.config内容看起来是未来的正确选择。

我可以说是解决这个问题的其他解决方案。在csproj文件中创建以下内容:

<Content Include="DB.config">
  <SubType>Designer</SubType>
</Content>
    <Content Include="DB.Debug.config">
  <DependentUpon>DB.config</DependentUpon>
  <SubType>Designer</SubType>
</Content>
    <Content Include="DB.Release.config">
  <DependentUpon>DB.config</DependentUpon>
  <SubType>Designer</SubType>
</Content>

在xml编写中,设置发布和调试的两个版本

从2018年开始,对于较新版本的Visual Studio,Microsoft已经接管了SlowCheetah扩展。安装此选项后,您可以选择将app.config文件拆分为三个单独的文件。一个是一个基本文件,其中包含始终适用的代码,然后您会得到一个app.debug.config文件和一个app.release.config文件

请注意,在项目中将其作为NuGet包拉入是不够的。如果您想要VisualStudioUI菜单选项,您需要从下面的站点下载安装程序并运行它。然后,将SlowCheetah专门安装在您希望在使用NuGet时使用它的任何项目上

还请注意,原始开发人员的原始SlowCheetah程序仍然存在,但请将Microsoft发布的程序用于较新版本的Visual Studio


当您打开一个web项目时,您将获得两个额外的web.Config文件,即web.Debug.Config和web.Release.Config

1.将所需的连接字符串添加到XSLT属性为xdt:Transform=SetAttributes xdt:Locator=Matchname的文件中

<connectionStrings>
  <add name="myConnectionString" connectionString="myConnectionString" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>"
2.编辑csproj并添加TransformXml目标:

<Target Name="TransformActiveConfiguration" Condition="Exists('$(ProjectDir)/Web.$(Configuration).config')" BeforeTargets="Compile" >
    <TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" />
</Target>

第二步将根据活动配置在每个构建上进行转换,而不仅仅是在发布时进行转换,从而为您提供更好的调试体验。我从中学到的。

我认为这是一个好建议。您能否详细说明如何将预编译条件添加到VS-2008项目中?我没有使用MSBuild或任何其他生成过程。我只是从VisualStudio中清理/重建和部署。谢谢朋友。您的方法和示例代码很快就完成了这项任务。+1我喜欢在服务器本身更改某些内容的想法。这似乎比其他方法更不容易出错。谢谢你的建议。这可能是最实用、最方便的。唯一的缺点是,如果在一个大型web服务器场中有很多生产服务器,则必须确保设置环境变量,尽管如果您有一个映像,您只需猛击它就不太重要了。虽然我认为您的答案不值得否决,我真的不想走DSN路线。