C# 将CulterInfo解析到dll一次

C# 将CulterInfo解析到dll一次,c#,dll,C#,Dll,我有一个小应用程序,它有一个GUI表单和一个类库。在我的类库中,我有一个名为“设置”的类。设置具有字符串属性“CulterInfo” 这是来自GUI.frm(代码1)的代码 这是来自Base.dll(代码2)的代码 这是“设置”类的代码(代码3) 当我像上面那样做时,我会得到一个错误。原因是因为我使用的Base.Settings.CultureInfo=“en-US”实际上仍然是空的 当我评论Base.Settings.CultureInfo=“en-US”和do私有静态字符串cultureIn

我有一个小应用程序,它有一个GUI
表单
和一个
类库
。在我的类库中,我有一个名为“设置”的
类。设置具有
字符串属性
“CulterInfo”

这是来自
GUI.frm
(代码1)的代码

这是来自
Base.dll
(代码2)的代码

这是“设置”类的代码(代码3)

当我像上面那样做时,我会得到一个错误。原因是因为我使用的
Base.Settings.CultureInfo=“en-US”实际上仍然是空的

当我评论Base.Settings.CultureInfo=“en-US”和do
私有静态字符串cultureInfo=“en-US”在代码3中,它正在工作


所以我的主要问题是,我想为我正在使用的
dll
设置一次
CultureInfo
,但这并不像我希望的那样工作。是否有更好的方法为
dll
设置
CultureInfo
一次,比如在应用程序启动时,这样就不必再为它操心了



编辑1:使用配置文件可以解决这个问题,还是有更优雅的解决方案?

您的
静态CultureInfo cul=新的CultureInfo(Settings.CultureInfo)很可能在更新
Base.Settings.CultureInfo
之前初始化

您可以使用
InvariantCulture
初始化静态
CultureInfo
,并在使用
dll

//Code 3
public class Settings
{
    private static CultureInfo culture = CultureInfo.InvariantCulture;
    public static CultureInfo Culture
    {
        get { return culture; }
        set { culture = value; }
    }

    public static void SetCulture(string name)
    {
        culture = new CultureInfo(name);
    }
}

是的,那是为了我,tnx。
static ResourceManager rm = new ResourceManager("Languages.Language", System.Reflection.Assembly.LoadFrom("Languages.dll"));
static CultureInfo cul = new CultureInfo(Settings.CultureInfo);
public static void test(EventArgs e)
{
    ParseException(null, new ExceptionHandlerEventArgs() { ExceptionMessage = rm.GetString("exDefault", cul) });
}
public class Settings
{
    private static string cultureInfo;
    public static string CultureInfo { get { return cultureInfo; } set { cultureInfo = value; } }
}
//Code 3
public class Settings
{
    private static CultureInfo culture = CultureInfo.InvariantCulture;
    public static CultureInfo Culture
    {
        get { return culture; }
        set { culture = value; }
    }

    public static void SetCulture(string name)
    {
        culture = new CultureInfo(name);
    }
}
//code 2
public class ExceptionHandler
{
    static ResourceManager rm = new ResourceManager("Languages.Language", System.Reflection.Assembly.LoadFrom("Languages.dll"));

    public static void test(EventArgs e)
    {
        ParseException(null, new ExceptionHandlerEventArgs() { ExceptionMessage = rm.GetString("exDefault", Settings.Culture) });
    }
}
//code 1
/*Base.Settings.Culture = new CultureInfo("en-US");*/ //or...
Base.Settings.SetCulture("en-US");
ExceptionHandler.test(new EventArgs());