为资源创建自己的代码会引发错误 - 无法获取指定或中性文化的数据

问题描述 投票:0回答:1

我一直遇到文化错误,但我无法解决。我试图反复讨论这个问题,之前提出了一个已关闭的问题并实施了各种解决方案但没有成功。问题末尾提到了所有测试解决方案的详细信息。这是我的两个文件:

第一个文件(主代码):

using Properties;
using System;
using System.IO;

namespace malt
{
    class Programs
    {
        static void Main(string[] args)
        {
            byte[] med = Properties.Resources.med;
            Console.WriteLine(med);
        }
    }
}

第二个文件(与 Resources.resx 在同一文件夹中的 Resources.cs):

using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Resources;
using System.Runtime.CompilerServices;


namespace Properties
{
  internal sealed class Resources
  {
    private static ResourceManager resourceMan;
    public static CultureInfo resourceCulture = CultureInfo.InvariantCulture;


    internal Resources()
    {
    }

    [EditorBrowsable(EditorBrowsableState.Advanced)]
    internal static ResourceManager ResourceManager
    {
      get
      {
        if (Properties.Resources.resourceMan == null)
          Properties.Resources.resourceMan = new ResourceManager("Properties.Resources", typeof (Properties.Resources).Assembly);
        return Properties.Resources.resourceMan;
      }
    }

    [EditorBrowsable(EditorBrowsableState.Advanced)]
    internal static CultureInfo Culture
    {
      get => Properties.Resources.resourceCulture;
      set => Properties.Resources.resourceCulture = value;
    }

    internal static byte[] med => (byte[]) Properties.Resources.ResourceManager.GetObject(nameof (med), CultureInfo.InvariantCulture);
  }
}

完整错误:

找不到适合指定文化的任何资源或 中性文化。确保“Properties.Resources.resources” 在编译时被正确嵌入或链接到程序集“madt”中, 或者所需的所有卫星组件都是可加载且完全 签名


注意 我之前问过这个问题,虽然它指向的地址不是解决方案,但它关闭了问题,即使我编辑了它也没有重新打开它。这就是为什么我再次问:)

我尝试过的事情列表:

  • 在说这个链接是答案并关闭问题之前找不到任何适合特定文化或中性文化的资源

  • 我的 .resx 文件的编译操作属性是嵌入式的,但仍然不起作用

  • 两个文件都不包含任何特殊字符

  • Resources.cs

    internal static byte[] med => (byte[]) Properties.Resources.ResourceManager.GetObject(nameof (medus1), CultureInfo.InvariantCulture);
    行中的“CultureInfo.InvariantCulture”我玩了太多时间

  • 我也试过以前问过的问题的答案,但没有用

  • 我的代码中没有这样的功能

    ProblemAssembly.Support
    。我的问题在
    internal static byte[] med => (byte[]) Properties.Resources.ResourceManager.GetObject(nameof (med), CultureInfo.InvariantCulture);
    行。如果你能适应这个,请告诉我

  • 我的 resx 文件的构建操作选项已经是 Embedded Resource

  • 我已经没有

    Properties/Resources.designer.cs
    文件

  • 我的resx文件已经包含在项目中

  • 我不使用 .NET Core 3.0

  • 试图将 CultureInfo 类型更改为 public、private、internal 但没有人工作过

  • 试图更改项目名称

  • 如果我使用 try catch 来逃避这个错误,我的代码将无法运行并且没有什么不同

c# .net compiler-errors resx culture
1个回答
0
投票

我认为你错过了关于“这个资源文件应该如何工作”的观点。开发人员不打算自己创建和编写这个

Resources.cs
文件,而是应该在实际资源更改resx
文件)时自动生成

这意味着:如果您将新行/新文件添加到

Resource1.resx
-> Visual Studio(或任何其他 IDE)将通过使用文件属性中指定的生成器工具调用该
Resources1.Designer.cs
的重新生成。这个生成器工具将修改现有的
Resources1.Designer.cs
并附加新的C#代码,以后可以在应用程序中使用。

我附上了它在解决方案资源管理器中的截图(注意

Resource1.Designer.cs
隐藏在
Resource1.resx
文件下,必须展开才能看到)+
resx
文件的设置细节(它被标记为作为
Embedded resource
并有
ResXFileCodeGenerator
作为发电机):

从文件中获取资源,直接通过生成代码抓取即可:

// The format for accessing is <nameOfFile>.<nameOfResourceWithinFile>
var myResource = Resource1.med;
© www.soinside.com 2019 - 2024. All rights reserved.