ASP.NET 全局资源问题

ASP.NET global resources issue

我遇到了一个问题,我花了好几个晚上才解决。 我将 ASP.NET Web 项目迁移到 Web 应用程序。

我的主要问题是 App_GlobalResources 下面的 .resx 文件。 假设我有 MyStrings.resx(= 默认文化)和 MyStrings.en.resx(是的,英语不是我的默认设置)。

如果我使用 "Add..." 在解决方案资源管理器的解决方案中创建文件,我将获得以下设置: * 构建操作:内容 * 自定义工具:GlobalResourceProxyGenerator

我猜大多数情况下默认设置都可以,但我已经遇到了两个问题: a) 如果我将生成操作保留为 "Content",我将在代码中使用 ResourceManager.GetString 时收到 MissingManifestResourceException。解决方法:改为"EmbeddedResource"。 b) 我的计算机上似乎缺少 GlobalResourceProxyGenerator。如果我在 .resx 上选择 "Run Custom Tool",我会收到错误消息 "Cannot find custom tool '...' on this system. Great. Solution: Change it to "PublicResXFileCodeGenerator”。这有效。

现在,如果我保留 PublicResXFileCodeGenerator 的设置,所有内容都会编译,但是当我 运行 解决方案(IIS 和 VS Express 2013 for Web)时,我得到了友好的消息,我得到了 "Resources.MyStrings"在 MyWebSite.dll 和 App_GlobalResources.dll 中。

好的,我将自定义工具更改为 "ResXFileCodeGenerator"。现在,一切正常。 我现在正在将解决方案部署到网络服务器。我得到 CS0122:Resources.MyStrings 由于其保护级别而无法访问。 这可能是由于它的 "internal" 声明。

现在我完全迷路了。有什么可以帮助解决这个问题的吗?

环境: IIS 本地和联机 VS Express 2013 网络版 两种语言。 对于这两个设置是: 构建操作:嵌入式资源 复制到输出目录:不复制 自定义工具:ResXfileCodeGenerator 自定义工具命名空间:资源

对于生成的设计器文件(仅默认语言),设置为: 构建操作:编译 复制到输出目录:不要复制

感谢任何帮助

我并没有真正找到问题的根源,但我找到了一个很好的解决方法。核心问题可能是 Resources.MyStrings class 同时出现在 MyWebsite.dll 和 App_GlobalResoures.dll 中。我没有找到预期的设置是什么来确保你只得到一次。

我的解决方案:我创建了一个 "Resources" 文件夹,复制了我所有的 .resx 文件并删除了 App_GlobalResources。 也适用于不同的语言。

为什么会有 "App_Globalresources" 文件夹?