在app.config中引用class属性?

Reference class property in app.config?

我和我的一个同事正在开发一个连接到数据库的应用程序,使用 LINQ(以及随后的 DBML 文件)。我们每个人都有自己的连接字符串,以便像这样在自己的数据库上工作:

public class DbConfig
{    
   public static string conStr = @"My connection string";
   public static string conStr = @"His connection string";
}

每次我们每个人在他们的项目部分工作时,我们只是注释掉另一个连接字符串。 我的连接是,如果我可以引用 DBML 文件使用的 app.config 文件中的任何两个 conString 属性。谢谢。

您可以创建个人构建配置 (https://msdn.microsoft.com/en-us/library/kwybya3w.aspx) 并在该配置中定义一些自定义标签,这样您就可以在代码中拥有

#if MyBuild
    public static string conStr = @"My connection string";
#endif

#if HisBuild
   public static string conStr = @"His connection string";
#endif

定义您的自定义

打开项目的 属性 页面 -> 构建,然后在选择自定义配置后修改条件编译常量 属性。

这就是您可以定义自己的符号的方法,然后根据您当前的构建设置(例如在每一页的顶部写上#define YourSymbol)include/exclude 实际使用#if #endif 代码

另一种解决方案可能只是添加对您的应用程序设置的外部引用,并且该引用的文件不包含在您的源存储库中(这样您就不会共享它) 这样任何程序员都可以拥有自己的文件配置

只需在您的应用程序中输入。config/web.config 一行

<appSettings configSource="YourCustomConfiguration.config"/>

然后不要将其添加到 teamfoundation 或您使用的任何 cvs

当然YourCustomConfiguration.config是一个文件,你想放哪里就放哪里,指定一个相对路径就可以了

好吧,我说的是 appsettings,但您可以根据需要使用 configSource,在您的情况下 <connectionStrings configSource="YourCustomConnectionStrings.config">

您可以使用您的机器名称来执行此操作,使用如下代码:

public static class ConnectionString
{
    public static string Get
    {
        get
        {
            if(ConfigurationManager.ConnectionStrings.Count == 0)
                throw new Exception("No connection strings");

            var machineConnectionString = ConfigurationManager.ConnectionStrings["ConStringPrefix" + Environment.MachineName];
            var genericConnectionString = ConfigurationManager.ConnectionStrings["DefaultConString"];
            return  machineConnectionString ?? genericConnectionString;
        }
    }
}

然后你 app.config 你将拥有:

<connectionStrings>
    <add name="ConStringPrefix@MyPCName" connectionString="Data Source=.\sqlexpress;Initial Catalog=DatabaseName;Integrated Security=true" providerName="System.Data.SqlClient" />
    <add name="ConStringPrefix@MyFriendPcName" connectionString="Data Source=.\sqlexpress;Initial Catalog=DatabaseName;Integrated Security=true" providerName="System.Data.SqlClient" />
    <add name="nhibernate.conexao" connectionString="Data Source=.\sqlexpress;Initial Catalog=DatabaseName;Integrated Security=true" providerName="System.Data.SqlClient" />
</connectionStrings>