ASP.NET全局资源问题

时间:2015-01-19 21:15:28

标签: c# asp.net app-globalresources

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

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

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

我猜大多数情况下默认设置都没问题,但我已经遇到了两个问题: a)如果我将Build Action保留为" Content",在代码中使用ResourceManager.GetString时,我将得到一个MissingManifestResourceException。解决方案:将其更改为" EmbeddedResource"。 b)我的计算机上似乎缺少GlobalResourceProxyGenerator。如果我选择"运行自定义工具"在.resx上我收到错误消息"找不到自定义工具' ...'在这个系统上。大。解决方案:将其更改为" PublicResXFileCodeGenerator"。这有效。

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

好的,我将自定义工具更改为" ResXFileCodeGenerator"。现在,一切都运转良好。 我现在正在将解决方案部署到Web服务器。在那里我得到CS0122:由于其保护级别,Resources.MyStrings无法访问。 这可能是由于它的内部"宣言。

到现在为止,我完全迷失了。有任何帮助来清理这种情况吗?

环境: IIS本地和在线 VS Express 2013 for Web 两种语言。 这两个设置是: 构建操作:嵌入式资源 复制到输出目录:不要复制 自定义工具:ResXfileCodeGenerator 自定义工具命名空间:资源

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

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我并没有真正找到麻烦的来源,但我找到了一个很好的解决方法。核心问题可能是Resources.MyStrings类存在于MyWebsite.dll和App_GlobalResoures.dll中。我没有找到预期的设置,以确保您只获得一次。

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

为什么会有“App_Globalresources”文件夹?