我正在开发一个非常简单的网页(MVC2),使用基于资源文件的本地化。
我将MVC2项目和资源放在一个单独的程序集中。
资源包含3种语言(Resource.resx, Resource.de.resx, Resource.en.resx, Resource.ja.resx
),我通过ResourceManager
查询它们。
从.aspx页面调用:
<% Resources.Res resman = new Resources.Res(); %>
<%=resman.GetString("String1", new System.Globalization.CultureInfo("en")) %><br />
<%=resman.GetString("String1", new System.Globalization.CultureInfo("ja")) %><br />
<%=resman.GetString("String1", new System.Globalization.CultureInfo("de")) %><br />
ResourceManager
:
public class Res
{
private readonly ResourceManager Manager = Resources.Resource1.ResourceManager;
public string GetString(string id, CultureInfo info)
{
return Manager.GetString(id, info);
}
}
在VS2008中编译的版本我得到这样的东西:
String1EN
String1JA
String1DE
在Visual Studio 2008中编译,这很好用,但是如果我在Visual Studio 2010中编译解决方案(也是3.5作为TargetFramework),我会遇到麻烦。
结果显示如下:
String1DEFAULT
String1JA
String1DEFAULT
我不知道它是什么:这仍然是VS2010 RC的错误还是我在这里做错了什么?
更新 我发现它适用于IIS 7.5,但不适用于IIS 7.0。不幸的是,它不适合我。
答案 0 :(得分:1)
我知道这不完全是一个答案,但我想到了一些可能对你有帮助的事情,如果你真的打了一个砖墙......
能够查看.net代码并查看发生的情况可能很有用。如果您想尝试此操作,请执行以下操作:
如果显示符号文件(.pdb)位置,请键入
提供一条路径,其中显示“将符号存储符号缓存到此目录:”
现在,在调试时,您应该可以进入资源管理器代码。
如果这仍然不适合您并且所有其他方法都失败了,您可以通过编写自己的资源管理器来解决您的问题。您可以通过实现IResourceReader来完成此操作。我在这里找到了一个示例:
答案 1 :(得分:1)
它应该工作。所以问题是弄清楚缺少什么:
bin目录中右侧子文件夹中的正确DLL是什么?
如果在这些调用之前和之后转储加载的DLL(AppDomain.CurrentDomain.GetAssemblies()
),它是否显示它已加载DLL?
IIS是否具有DLL的适当权限?
如果你在VS2010中以.NET 3.5模式编译它是否有用,如果不是在编译的DLL中有什么区别?
答案 2 :(得分:0)
我没弄清楚出了什么问题。但是自从VS2010和.NET 4.0于昨天发布以来,我有机会尝试使用已发布的版本并且运行良好。
所以我想这只是RC中的一个错误,现在已经解决了。