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

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

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

这不是一个严重的错误,但是对于项目中的其他开发人员来说,为他们将要使用的资源文件find不同的名称空间和访问修饰符会造成误导。

谢谢你的帮助。

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

当我试图关注这篇文章的时候 ,我也偶然发现了这个问题。 按照作者的build议下载源文件后,我注意到已经存在的资源文件在“Custom Tool”属性中有以下类:“PublicResXFileCodeGenerator”。 另外,“Build Action”属性被设置为“Embedded Resource”,但我不确定这是否是问题的一部分。

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

我也注意到当前的资源文件是“2.0”格式,而新的文件是“1.3”格式。 使用XML编辑器打开resx文件(或者使用visual studio自带的“打开”),您可以看到这一点。

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

更新:

这个博客条目也可能有帮助。

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

或者你可以改变CustomTool属性(在VS2010中testing)。

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

资源

resx根据Visual Studio项目configuration中指定的命名空间select命名空间。 更新你的项目有正确的命名空间,和resx应该inheritance它(新的肯定,不知道如果现有的将被修复 – 他们应该)。

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