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

时间:2009-08-26 09:08:39

标签: c# visual-studio-2008 namespaces resx

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

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

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

5 个答案:

答案 0 :(得分:62)

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

答案 1 :(得分:44)

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

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

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

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

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

更新

This blog entry也可以提供帮助。

答案 2 :(得分:11)

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

  

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

Source

答案 3 :(得分:6)

resx根据Visual Studio项目配置中指定的命名空间选取命名空间。更新你的项目以获得正确的命名空间,resx应该继承它(新的肯定,不确定现有的是否会被修复 - 他们应该)。

答案 4 :(得分:4)

资源文件访问修饰符位于.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>