.resx不使用vb​​代码

时间:2017-05-10 20:34:10

标签: asp.net vb.net

我正在制作一个带有vb编码的asp.net Web应用程序。我在网上发现了一个用于制作多语言网站的代码,并且由于原始代码是在C#中,我做了一个C#项目来尝试它。一切都很顺利。现在,我将代码转换为VB以在原始项目中使用它,并且出于某种原因,调试不想启动,总是将MissingManifestResourceException作为错误抛出。资源文件'Build Action'设置为Embedded Resource,我使用的代码是:

Dim rm As ResourceManager
Dim ci As CultureInfo
Private Sub LoadString()
Thread.CurrentThread.CurrentCulture = New CultureInfo(Session("Lang").ToString())
    rm = New ResourceManager("WebApplication6.App_GlobalResources.Lang", Assembly.GetExecutingAssembly())
    ci = Thread.CurrentThread.CurrentCulture

    NavigationMenu.Items(0).Text = rm.GetString("MenuItemDefault", ci)
    NavigationMenu.Items(1).Text = rm.GetString("MenuItemAbout", ci)
End Sub

其中“Lang”是基本资源文件的名称。文件名称: Lang.en-US.resx,Lang.es-ES.resx

整个错误如下:

MissingManifestResourceException was unhandled by user code

Could not find any resources appropriate for the 
specified culture or the neutral culture.  Make sure 
"WebApplication6.App_GlobalResources.Lang.resources" was correctly embedded or linked into 
assembly "WebApplication6" at compile time, or that all the satellite 
assemblies required are loadable and fully signed."

同样,在C#中,整个过程都奏效了。此代码放在一个函数中,该函数从Load_Page表单中调用。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

花了好几个小时试图搞清楚后,我找到了一个解决方案。 我做的是替换这个字符串:

rm = New ResourceManager("WebApplication6.App_GlobalResources.Lang", Assembly.GetExecutingAssembly())

有了这个:

rm = New ResourceManager("WebApplication6.Lang", System.Reflection.Assembly.Load("WebApplication6"))

但是从原始字符串中删除“App_GlobalResources”也有效。所以另一个可行的解决方案是:

rm = New ResourceManager("WebApplication6.Language", Assembly.GetExecutingAssembly())

更换字符串后,我只是将其他所有内容保留在主帖中。现在一切正常。