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

时间:2015-12-16 14:06:10

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

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

有什么想法吗?

我在ASP.NET MVC 6(ASP.NET5)中工作。该项目是一个类库,但我在Web项目中测试了相同的结果。

谢谢!

enter image description here

修改:添加了“属性”窗口 enter image description here

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:5)

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

总结:

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

答案 2 :(得分:2)

我遇到过类似的问题。

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

答案 3 :(得分:2)

A)在 Asp.net核心项目中

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

  1. 添加资源设计人员在Resource.resx保存
  2. 中的所有项目
  3. 在解决方案资源管理器中展开Resource.resx树,打开Resource.Designer.cs
  4. public中的所有internal字符串替换为<{1}}并保存
  5.   

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

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

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

    B) Normal Asp.net 项目

      

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

         

    然后您应手动更改项目(.csproj)文件中的某些设置。这很容易,只需按照我的指示:

    1. 右键点击solution explorer中的项目,然后选择卸载项目
    2. 再次右键单击它并选择编辑..... csproj
    3. 在已打开的.csproj文件中,查找 .resx字符串,您将看到一个设置块。这就像波纹管代码。
    4. 更改为类似以下代码(包括 的 PublicResXFileCodeGenerator ):
    5. <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文件并享受;)
      4.   

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