Visual Studio 2015,无法更改新资源文件的访问修饰符

Posted

技术标签:

【中文标题】Visual Studio 2015,无法更改新资源文件的访问修饰符【英文标题】:Visual Studio 2015, can't change access modifier of new resources files 【发布时间】:2015-12-16 14:06:10 【问题描述】:

我正在尝试在 VS2015 中创建新的资源文件。我创建它们很好,但是当我尝试更改“访问修饰符”时,下拉列表被禁用...

有什么想法吗?

我正在使用 ASP.NET MVC 6 (ASP.NET5)。该项目是一个类库,但我在 Web 项目中进行了测试,结果相同。

谢谢!!

编辑:添加属性窗口

【问题讨论】:

在 Notepad++ 上打开设计器文件 (Resource.Designer.resx) 并更改 internal/private 修饰符(来自所有属性、构造函数和类)。 @chemitaxis,按照my answer中的说明进行操作 【参考方案1】:

您能否检查文件的属性并验证自定义工具是否为 ResXFileCodeGenerator ?如果是 GlobalResourceProxyGenerator,下拉菜单将被禁用。

【讨论】:

直接进入解决方案资源管理器并右键单击您的文件以获取属性。如果你只是打开窗口属性它不会显示任何东西:( CustomTool 在“高级”类别中,就在复制到输出目录之后。 嗨@arya404我已经更新了我的问题......就像你看到的那样,我没有选择改变任何东西......我已经用一个干净的新项目进行了测试,结果相同...... . 我已经在新安装VS的新电脑上测试过,但是还是不行…… 我也有同样的问题 :( 这里也一样:我【参考方案2】:

我遇到了同样的问题,但我找到了这个简单的解决方案Visual Studio's Access Modifier drop down option is disabled for resource file

总结一下:

    右键单击您的文件资源,选择属性(Alt+Enter) 将构建操作更改为嵌入式资源 将自定义工具更改为 PublicResXFileCodeGenerator

【讨论】:

你如何改变这个?这是我的 .resx 文件的属性页的样子:imgur.com/0DYC6d9 我刚刚从解决方案资源管理器面板右键单击我的资源文件。当你来到这里时,我有很多不同的看法。 你的项目是asp核心项目吗? 这是 ASP.NET MVC 项目。【参考方案3】:

A) 在 Asp.net Core 项目中

此问题是Asp.net Core 项目中的known bug,默认情况下访问修饰符在public 上,您无法更改它。下次更新asp.net核心团队会解决但是如果你需要internal访问修饰符你可以使用我的临时解决方案:

    添加资源设计师在您的Resource.resx 中的所有项目并保存 在解决方案资源管理器中展开 Resource.resx 树并打开 Resource.Designer.cs 替换其中所有public字符串为internal保存

注意:每次保存 Resource.resx 文件时,都应再次执行第 3 步

最后你应该有一个带有访问修饰符的Resource.Designer.cs 文件,如下所示:

还要检查Resource.Designer.cs 文件中的namespace。它应该是一个合适的namespace。与您的项目同步namespace


B) 在普通 Asp.net 项目中

如果您的资源 (.resx) 文件的 Properties panel 中没有 CustomTool 属性,请将其更改为 PublicResXFileCodeGenerator 并解决问题

那么您应该手动更改项目 (.csproj) 文件中的一些设置。这很简单,只需按照我的说明操作即可:

    右键单击solution explorer 中的项目并选择卸载项目 再次右键单击它并选择Edit .....csproj 在打开的.csproj 文件中,找到.resx 字符串,您将在那里看到一个设置块。这类似于下面的代码。 更改类似于以下代码(包括 PublicResXFileCodeGenerator):

.

<EmbeddedResource Include="MyResourceFile.resx">
      <SubType>Designer</SubType>

      <Generator>PublicResXFileCodeGenerator</Generator> <!--important line-->

      <LastGenOutput>MyResourceFile.Designer.cs</LastGenOutput>
</EmbeddedResource>
    保存编辑后的.csproj文件 在solution explorer 中再次右键单击您的项目并选择重新加载项目 现在打开您的 .resx 文件并享受 ;)

注意:使用您的资源文件名而不是MyResourceFile

【讨论】:

但是如果没有.csproj 文件——只有一个.xproj 文件怎么办(注意问题的标签)? @Tubbe,好点子。我编辑了我的答案并在asp.net core 项目中为这个错误添加了一个新的临时解决方案。我希望它有效。 @Simon,我测试过了。我创建了一个新的核心项目并执行了核心部分指令,然后我构建了核心项目。现在,如果我打开Resource.Designer.cs 文件,我会看到所有访问修饰符都是internal。那你的问题是什么? @RAM 当我将访问修饰符编辑为公共时,我收到 MissingManifestResourceException @Simon,我用图片编辑了我的答案。默认值为public,每次打开.resx文件并保存时,其中的所有访问修饰符都会自动更改为public(原因是错误)因此无需将它们编辑为@987654361 @手动。如果您想要公共访问修饰符,只需打开并保存它,但如果您想要internal,您可以尝试我的答案的A 部分。我测试了几次,没有任何错误。检查 Resource.Designer.cs 文件中的命名空间。它应该有一个适当的命名空间。另请阅读this answer。【参考方案4】:

我也遇到过类似的问题。

这似乎是一个已知问题:https://github.com/aspnet/Tooling/issues/339

【讨论】:

以上是关于Visual Studio 2015,无法更改新资源文件的访问修饰符的主要内容,如果未能解决你的问题,请参考以下文章

注册表无法修改权限(visual studio2015安装),

在 Visual Studio (2015) 中编译更改的 cpp 文件

Visual Studio 无法识别环境变量的更改

更改密码后无法使用Visual Studio 2013登录Windows azure帐户

在 Visual Studio 2015 中更改文件编码

Visual Studio 无法启动调试