无法访问的、内部的、资源文件?

34

我正在使用C#构建一个ASP.NET MVC 4网站。我正在使用资源文件(.resx)本地化所有的静态字符串。我使用Visual Studio界面创建和填充资源文件。在我的index.cshtml视图中,我尝试使用资源文件中的一个字符串,如下所示:

@using Namespace.To.RESX.File

...

<h1>@EN_US.GLOBAL_NAME</h1>
<h2>&ldquo;@EN_US.GLOBAL_SLOGAN&rdquo;</h2>

...

我可以编译该应用程序,但在加载页面时出现运行时错误,显示:

Compiler Error Message: CS0122: 'Namespace.To.RESX.File.EN_US' is inaccessible due to its protection level

在resx设计器文件中查看,我可以看到该类及其所有成员都标记为internal。我完全了解C#访问控制修饰符的作用、工作原理等内容,但我不明白为什么Visual Studio会像这样限制对资源成员的访问。

为什么Visual Studio会这样做?是否有(简单)方法可以更改这些访问控制修饰符,或者是我完全误解了资源文件的意义?

3个回答

81

是的...我没有看到这个。在设计模式下打开资源文件并更改访问修饰符(至少在VS 2013中):

输入图像描述


6
如果它们在同一项目中,那么内部应该仍然能够工作,对吗? - David Klempfner

12

针对Mac/Visual Studio 2017的用户,打开.Designer文件并将您的类设置为public:

文件夹:

输入图像描述

将internal改为public并保存:

输入图像描述

更新:每次您想要进行此更改的更改时,它可能会默认回到internal。请按照此处列出的步骤进行更改。

  1. 右键单击资源文件(resource.resx)=>属性

  2. 自定义工具=>更改为PublicResXFileCodeGenerator


0

我不知道这是不是VS 2019的一个bug,但根据Oliver Spryn的答案,我可以展开默认为“Internal”的访问修饰符下拉框,但是单击“Public”只会在MouseDown时关闭下拉框而不选择选项。因此,如果您单击以展开列表,然后使用键盘向下箭头选择“Public”并按Enter,它将更改该值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接