2009-08-26 106 views
39

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

在另一方面,三个人的资源,我刚刚创建有不同的命名空间(Resources)和internal访问修饰符的文件,我不能够在资源文件形式从Visual Studio的,因为它是禁用的更改。如果我试图直接在designer.cs文件中更改它,则在下一次保存文件时将取消修改。

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

回答

42

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

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

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

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

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

更新:

This blog entry也可能会有帮助。

+0

非常有用的博客条目。谢谢! – ongle 2009-12-31 14:30:01

+0

这也发生在VS2010中:将resx文件复制粘贴到项目中可能是问题所在,如果您这样做,它会将.resx文件设置为GlobalResourceProxyGenerator。 – 2012-07-25 14:55:00

6

resx根据Visual Studio项目配置中指定的名称空间选取名称空间。更新你的项目有正确的命名空间,和resx应该继承它(新的确定,不知道现有的将被修复 - 他们应该)。

+0

默认的项目命名空间看起来不错:'WebApplication' – 2009-08-26 12:01:39

4

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

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

外观为<Generator>元件,并按照以下实施例将其值设置:

internal改性剂A资源文件看起来像这样,

<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> 
+0

如果你扩展了你的答案,那么它也会说''.csproj'应该看起来在哪里*。据我所知,只是使用了一个不同的生成器('PublicResXFileCodeGenerator'而不是'ResXFileCodeGenerator')。这也应该可以在VS的属性窗口中编辑.resx项目项目。 – stakx 2017-06-26 07:52:36

+0

谢谢@stakx;我按照建议添加了示例 – 2017-06-26 09:00:20

10

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

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

Source

+0

小心使用ASP.NET的人,因为在使用“嵌入式资源”发布时,这可能不会在服务器上发布。作为“内容”的“构建行动”虽然 – 2014-02-26 22:47:07

44

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

+3

最简单的答案为VS2012 – 2014-08-18 18:04:10