更改资源文件(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>