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

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

有什么想法吗?

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

谢谢!!

编辑:添加属性窗口

【问题讨论】:

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

标签: c# asp.net visual-studio-2015 asp.net-core resx


【解决方案1】:

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

【讨论】:

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

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

总结一下:

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

【讨论】:

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

A) 在 Asp.net Core 项目中

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

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

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

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

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


B) 在普通 Asp.net 项目中

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

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

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

.

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

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

      <LastGenOutput>MyResourceFile.Designer.cs</LastGenOutput>
</EmbeddedResource>
  1. 保存编辑后的.csproj文件
  2. solution explorer 中再次右键单击您的项目并选择重新加载项目
  3. 现在打开您的 .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

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 2010-11-22
    • 2015-09-16
    • 2021-12-26
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多