Has*_*tar 7 c# asp.net-mvc visual-studio-2012
我正在开发一个项目,其中本地化的字符串稍后将插入到实时ASP.NET(MVC4)站点/应用程序中.我们计划实现此目的的方式(用于验证消息等)是从客户端获取字符串,将它们放在.resx文件中,将此.resx文件编译为.resources文件,然后编译为.dll.最后,此.dll将放置在实际站点的相关语言文件夹中.但是,应用程序未捕获此手动创建的.dll.相反,它会回退到默认语言.dll.另一方面,如果.resx文件是通过Visual Studio(2012)编译的,则应用程序可以很好地选择.dll,并从中显示本地化文本.
我猜测问题在于我手动创建.dll的方式,虽然我找不到任何错误.这是我在命令行控制台中运行的内容:
resgen Strings.fr-FR.resx Strings.fr-FR.resources
Run Code Online (Sandbox Code Playgroud)
然后,
al /t:lib /culture:fr-FR /embed:Strings.fr-FR.resources /out:MyApplication.resources.dll
Run Code Online (Sandbox Code Playgroud)
这可能是因为在生成法语本地化资源 DLL 时使用的命名空间与应用程序用于资源文件的命名空间不同。
您必须将资源文件从重命名Strings.fr-FR.resources为MyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources.
默认情况下,资源文件位于 Properties 文件夹中。这意味着您可以使用完全限定名称访问本地化字符串MyApplication.Properties.Resources.MyString。
如果您的应用程序名为 MyApplication 并且您的资源文件位于 Properties 文件夹下,请按以下方式生成资源文件:
resgen Strings.fr-FR.resx MyApplication.Properties.Resources.fr-FR.resources
Run Code Online (Sandbox Code Playgroud)
然后这样生成DLL:
al /t:lib /Culture:fr-FR /embed:MyApplication.Properties.Resources.fr-FR.resources /out:MyApplication.resources.dll
Run Code Online (Sandbox Code Playgroud)
现在,当您将其放入应用程序 bin 文件夹中的 fr-FR 文件夹中时,应该可以识别它。
查看之前生成的程序集和现在使用 ildasm.exe 生成的程序集的清单。您将在第二种情况下看到以下行,.mresource public 'MyApplication.Properties.Resources.fr-FR.resources'而在第一种情况下应该是类似的内容.mresource public 'Strings.fr-FR.resources'。由于您的应用程序在命名空间“MyApplication.Properties”中查找本地化字符串,因此找不到它...当然,请根据应用程序中使用的任何内容调整“MyApplication.Properties.Resources”(可能是“MyApplication.Localization”) .字符串')。