我正在尝试在编译期间动态创建连接字符串:
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。我试图避免为用户代码库的所有应用程序设置连接字符串。对于使用该库的每个项目,数据库的位置都不同。我有代码可以确定更正字符串,但是想要在类初始化期间运行它。这甚至可能吗?
答案 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文件的源代码。然后,您将连接字符串作为资源字符串。
有点黑客,但不是我见过的最糟糕的事情。我的版本号以类似的方式递增。