在.NET / SQLServer应用程序中管理调试和释放连接字符串的好方法是什么?
我有两个SQL Server,一个生产和一个构建/调试,我需要一种在部署ASP.NET应用程序时在两者之间切换的方法。
目前我只是将它们存储在web.config中并对其中一个进行注释,但在部署时容易出错。
答案 0 :(得分:14)
创建Web.config文件的调试版和发行版,例如: Web.debug.config和Web.release.config。然后添加一个预编译条件,根据当前Target将相关版本复制到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
Project Properties http://img442.imageshack.us/img442/1843/propsa.jpg
答案 1 :(得分:8)
好消息是.NET4只有a provision,你可以为每个配置单独配置(web.Release.config,web.Debug.config)。
坏消息是......你可能还没有使用它。
答案 2 :(得分:4)
使用预处理程序指令:当您的项目配置为在调试模式下运行时,将选择调试连接字符串,否则将自动选择发布连接字符串。
在Visual Studio中,您会注意到语句仅根据项目配置(调试或发布)进行调暗。
只需在代码中添加以下内容:
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
了解更多详情,请查看this。
答案 3 :(得分:2)
我通常在生产服务器上设置一个Environment变量,表示服务器是生产服务器。然后,我根据此环境变量是否存在并将其设置为生产值,从web.config中读取正确的连接字符串。
答案 4 :(得分:1)
我在.net 3.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东西看起来是未来的正确方法。
答案 5 :(得分:0)
好吧也许这有点过时,但是ODBC DSN很好地解决了这个问题 - 我仍然使用 - 严格 - DNS设置来区分生产环境和调试环境。
p.s。,我期待大量的下选票,或许这将衡量人们对数据库标识符间接层的看法。
答案 6 :(得分:0)
我可以说这个问题的其他解决方案。在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中编写了两个版本用于发布和调试。
答案 7 :(得分:0)
截至2018年,对于较新版本的Visual Studio,Microsoft已经接管了SlowCheetah扩展。安装此选项将为您提供将app.config文件拆分为三个单独文件的选项。一个是基本文件,其代码始终适用,然后您将获得app.debug.config文件和app.release.config文件。
请注意,在项目中将其作为NuGet包提取是不够的。如果您需要Visual Studio UI菜单选项,则需要从下面的站点实际下载安装程序并运行它。然后,使用NuGet在您要使用它的任何项目上专门安装SlowCheetah。
另请注意,原始开发人员的原始SlowCheetah程序仍然存在,但使用Microsoft发布的Visual Studio新版本。
答案 8 :(得分:0)
打开Web项目时,您将立即获得2个额外的Web.Config文件-Web.Debug.config和Web.Release.config。
1。将所需的连接字符串添加到具有XSLT属性xdt:Transform =“ SetAttributes” xdt:Locator =“ Match(name)”的文件中
<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>
第二步将对每个构建进行转换(根据您的活动配置),而不仅仅是对发布进行转换,从而为您提供更好的调试体验。我是从this post学到的。