Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从同一解决方案C的另一个项目访问资源文件_C#_Asp.net Mvc_Globalization - Fatal编程技术网

C# 从同一解决方案C的另一个项目访问资源文件

C# 从同一解决方案C的另一个项目访问资源文件,c#,asp.net-mvc,globalization,C#,Asp.net Mvc,Globalization,我有一个全球化项目在解决方案中,还有另一个主要项目。在全球化下有两个资源文件,Resources.resx和Resources.ar.resx。两个文件都有相同的密钥。我想根据在modelAPI中获得的语言输入输出结果 宣布此为全球: 资源经理室 然后我有了这个函数,它将检查来自模型的语言输入,并相应地选择资源文件 private void CheckResourceManager(string lang) { if (lang =="EN")

我有一个全球化项目在解决方案中,还有另一个主要项目。在全球化下有两个资源文件,Resources.resx和Resources.ar.resx。两个文件都有相同的密钥。我想根据在modelAPI中获得的语言输入输出结果

宣布此为全球: 资源经理室

然后我有了这个函数,它将检查来自模型的语言输入,并相应地选择资源文件

private void CheckResourceManager(string lang)
{                    
    if (lang =="EN")
    {
        rm = new ResourceManager(
            "Globalization.Resources", 
            Assembly.GetExecutingAssembly());
    }
    else
    {
        rm = new ResourceManager(
            "Globalization.Resources.ar", 
            Assembly.GetExecutingAssembly());
    }
}
在Api函数中,我首先检查CheckResourceManagermodel.Language; 当需要信息时,则: 抛出新的Exceptionrm.GetStringErrorUserName

现在的问题是Globalization.Resources.ar在函数中并没有像它一样读取资源;如果找不到文件,我应该在这里使用什么。若我在同一个项目中添加资源文件,那个么它就会工作。请告知。谢谢

正确的方法是从下面的答案,但对我来说这个方法很好

声明:

ResourceManager rm;
CultureInfo originalCulture = CultureInfo.CurrentCulture;
Assembly localizeAssembly = Assembly.Load("Globalization");
将功能更改为:

private void CheckResourceManager(string lang)
{
    if (lang =="EN")
    {
        System.Threading.Thread.CurrentThread.CurrentCulture = originalCulture;
        rm = new ResourceManager("Globalization.Resources", localizeAssembly);
    }
    else
    {
        System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ar");
        rm = new ResourceManager("Globalization.Resources", localizeAssembly);
    }
}
最后,当我需要获得一些价值时:

throw new Exception(rm.GetString("WrongUserName",CultureInfo.CurrentCulture));
谢谢。

ResourceManager的全部要点是根据当前线程的UI区域性切换到不同的区域性。你不需要做一个单独的函数来完成它。它不会明确地阅读本地化的文化-它是基于约定的。要控制当前线程的UI区域性,您需要在一个:

此外,传递ExecutingAssembly意味着您正在传递顶级程序集,它很可能不是您的资源所在的程序集。应在程序集中使用类型来获取程序集实例:

new ResourceManager(
        "Globalization.Resources", 
        typeof(ClassWithinResourcesAssembly).Assembly)
有关如何使用ResourceManager的更多信息,请参阅以下文档:


现在,当我添加解决方案名称如PartnerWebApplication.Globalization.Resources.ar时,我得到了以下错误。找不到任何适合指定区域性或非特定区域性的资源。确保PartnerWebApplication.Globalization.Resources.ar.Resources在编译时已正确嵌入或链接到程序集PartnerWebApplication,或者所有所需的附属程序集都可加载并完全签名。请尝试:右键单击.resx文件,选择属性并将生成操作设置为embedded Resources是,这是正确的方法。虽然对我来说,我只需要很少的值,所以我没有进入UI文化等。更改了System.Threading.Thread.CurrentThread.CurrentCulture=new CultureInfo的函数;rm=新的ResourceManagerGlobalization.Resources,localizeAssembly;现在英语和阿拉伯语都好了。
new ResourceManager(
        "Globalization.Resources", 
        typeof(ClassWithinResourcesAssembly).Assembly)