是否可以在* class * Initialisation期间动态设置静态字符串?

时间:2010-03-12 03:36:41

标签: c#

我正在尝试在编译期间动态创建连接字符串:

private static string m_ConnectionString
{
    get 
    {
        string connectionString = @"Data Source=" + myLibrary.common.GetExeDir() + @"\Database\db.sdf;";
        return connectionString;
    }
}
public static string ConnectionString = m_ConnectionString;

我一直遇到类型初始化错误。 ConnectionString在运行时结束为null。我试图避免为用户代码库的所有应用程序设置连接字符串。对于使用该库的每个项目,数据库的位置都不同。我有代码可以确定更正字符串,但是想要在类初始化期间运行它。这甚至可能吗?

3 个答案:

答案 0 :(得分:2)

只需设置断点并进入您的功能并尝试找出问题所在。

也许会抛出一些你实际上看不到的异常(在某些底层代码中)。要查找这些情况,您应该在Visual Studio中进行调试 - 异常并检查列表中的所有框。也许你可以找到这种方式,为什么你得到一个null而不是一个字符串。

答案 1 :(得分:2)

我同意Oliver发现错误的方法,但是想补充一点,你可以把它放在静态构造函数中。这将满足您“在类初始化期间”的要求。

public static string ConnectionString { get; private set; }

static MyClass()
{
    ConnectionString = @"Data Source=" + myLibrary.common.GetExeDir() + @"\Database\db.sdf;";
}

答案 2 :(得分:1)

该代码在运行时执行,而不是在编译时执行。我认为你走错了路。

另一个作为预构建事件运行的程序可以在编译之前修改resources.resx文件的源代码。然后,您将连接字符串作为资源字符串。

有点黑客,但不是我见过的最糟糕的事情。我的版本号以类似的方式递增。