55

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

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

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

4

5 回答 5

82

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

于 2012-09-14T13:30:50.967 回答
48

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

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

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

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

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

更新:

此博客条目也可能有所帮助。

于 2009-09-24T07:45:07.643 回答
11

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

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

来源

于 2012-07-02T07:45:38.523 回答
9

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

于 2009-08-26T10:06:40.693 回答
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>
于 2012-03-21T13:32:56.140 回答