更改资源文件 (resx) 命名空间和访问修饰符

Posted

技术标签:

【中文标题】更改资源文件 (resx) 命名空间和访问修饰符【英文标题】:Changing Resource files (resx) namespace and access modifier 【发布时间】:2010-11-22 22:22:03 【问题描述】:

在我的网络项目中,我在App_GlobalResources 文件夹中使用了 4 个资源文件。其中之一(lang.resx)是在我到达项目之前创建的。它具有正确的命名空间 (WebApplication.App_GlobalResources) 和访问修饰符:public

另一方面,我刚刚创建的其他三个资源文件具有不同的命名空间 (Resources) 和 internal 访问修饰符,我无法在 Visual Studio 的资源文件表单上更改它,因为它是禁用。如果我尝试直接在 Designer.cs 文件中进行更改,则在下次保存文件时会取消修改。

这不是一个严重的错误,但它可能会误导项目中的其他开发人员为他们将使用的资源文件找到不同的命名空间和访问修饰符。

【问题讨论】:

【参考方案1】:

resx 根据您在 Visual Studio 项目配置中指定的命名空间来选择命名空间。更新您的项目以拥有正确的命名空间,并且 resx 应该继承它(肯定是新的,不确定是否会修复现有的 - 他们应该)。

【讨论】:

【参考方案2】:

我还不完全确定问题出在哪里,但我可以告诉你,你可以通过更改用于生成代码的工具来解决它。

当我尝试关注this article 时,我也偶然发现了这个问题。按照作者的建议下载源文件后,我注意到已经存在的资源文件在“自定义工具”属性中具有以下类:“PublicResXFileCodeGenerator”。此外,“构建操作”属性设置为“嵌入式资源”,但我不确定这是否是问题的一部分。

我创建的任何新资源文件都使用了自定义工具“GlobalResourceProxyGenerator”。用前面提到的“PublicResXFileCodeGenerator”覆盖后似乎解决了问题,无论真正的问题是什么。

我还注意到当前的资源文件是“2.0”格式,而新文件是“1.3”格式。当您使用 XML 编辑器(或使用 Visual Studio 本身的“打开方式”)打开 resx 文件时,您可以看到这一点。

我希望你能让它像这样工作,但这并不理想。这可能是 Visual Studio 2008 和 SP1 或类似问题的安装问题。

更新:

This blog entry 也可能有帮助。

【讨论】:

非常有用的博客条目。谢谢! 这也发生在 VS2010 中:将 resx 文件复制 + 粘贴到项目中可能是问题所在,如果您这样做,它会将 .resx 文件设置为 GlobalResourceProxyGenerator。【参考方案3】:

资源文件访问修饰符位于.csproj

直接更改.csproj 文件应该可以解决此问题。

查找<Generator> 元素并根据以下示例设置其值:

带有internal修饰符的资源文件如下所示,

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

带有public 修饰符的资源文件如下所示。

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>PublicResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

【讨论】:

【参考方案4】:

或者您可以更改 CustomTool 属性(在 VS2010 中测试)。

您只需打开资源文件的文件属性并 将“自定义工具”从“GlobalResourceProxyGenerator”更改为 “PublicResXFileCodeGenerator”,这是本地的默认工具 资源文件。接下来,您必须将“构建操作”更改为 “嵌入式资源”。您可能还想分配适当的自定义工具 像“资源”这样的命名空间,以便正确访问文件,但是 这个没必要……

Source

【讨论】:

小心使用 ASP.NET 的人,因为在使用“嵌入式资源”发布时,这可能不会在服务器上发布。 “构建操作”作为“内容”工作正常【参考方案5】:

快速回答是:只需打开资源文件的属性并将Custom Tool Namespace 更改为您需要的命名空间。 就这么简单。

【讨论】:

VS2012 的最简单答案 /Properties 目录中有一个 .resx 文件,并希望它位于我的主命名空间:。它在保存时使用 .Properties 的命名空间进行更新。我没有在任何地方使用 .Properties 命名空间,而是可以使用这个答案让命名空间在 处保留,谢谢!

以上是关于更改资源文件 (resx) 命名空间和访问修饰符的主要内容,如果未能解决你的问题,请参考以下文章

WPF 访问 Resources.resx 资源文件

以编程方式更改语言就像英语到法语 wpf

资源(resx)自定义助手

如何在不捕获MissingManifestResourceException的情况下知道是否找不到资源文件

为啥仅在更改表单大小和添加不是资源的按钮时添加资源 (.resx) 文件

Visual Studio - Resx 文件默认“内部”为“公共”