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" 文件夹?
我遇到了一个问题,我花了好几个晚上才解决。 我将 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" 文件夹?