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 文件