【问题标题】:asp.net core with resource file (resx)带有资源文件 (resx) 的 asp.net 核心
【发布时间】:2020-07-20 01:50:40
【问题描述】:

我在 ASP.Net Core 中有一个项目,需要包含来自资源文件的图像(以生成 PDF)。

所以,我使用 Visual Studio 创建了一个新的资源文件(添加 > 新项目 > 资源文件),命名为 Resource.resx

使用托管资源编辑器(Visual Studio 的默认编辑器),我添加了一个名为 logo.png 的新图像。 使用下面列出的方法创建了一个名为 Resource.Designer.cs 的新文件:

public static System.Drawing.Bitmap logo {
    get {
        object obj = ResourceManager.GetObject("logo", resourceCulture);
        return ((System.Drawing.Bitmap)(obj));
    }
}

现在,只是为了测试,我创建了以下代码:

var logo = Resources.logo;

这引发了一个新异常,内容如下:

An unhandled exception of type 'System.InvalidCastException' occurred. Additional Information: Unable to cast object of type 'System.String' to type 'System.Drawing.Bitmap'.

我也尝试了这个链接的所有内容: https://weblogs.asp.net/jeff/beating-localization-into-submission-on-asp-net-5

但结果是一样的。

如果我在控制台应用程序上编写此代码,则一切正常。

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    我找到了另一种对我的问题有效的方法。

    http://codeopinion.com/asp-net-core-embedded-resource/

    只需要在项目上创建一个文件夹(在我的例子中是资源),然后,在 project.json 中,我包含以下代码:

    "buildOptions": {
      "embed": ["Resources/**/*"]
    }
    

    然后,我的代码:

    var assembly = Assembly.GetExecutingAssembly();
    var logoStream = assembly.GetManifestResourceStream("ProjectNamespace.Resources.logo.png");
    

    【讨论】:

      【解决方案2】:

      如果您使用.net core 3.1 api,您可以-

      1. 在 ConfigureServices 方法 (Startup.cs) 中添加services.AddLocalization();

      2. 在项目中添加资源文件 Resource.en-US.resx,在 Name 中添加 TestKey,在 Value 列中添加 Hello。

      3. 在同一层次结构中添加一个名为 Resource.cs 的类文件

      4. 在控制器中,添加一个变量-

        私有只读 IStringLocalizer _localizer;

      并将其注入构造函数-

      public TestController(IStringLocalizer<Resource> localizer)
              {            
                  _localizer = localizer;
              }
      
      1. 将资源名称的值读取为- _localizer["TestKey"] 你会得到你好(即在步骤#2中输入) 更多详情请访问 - [https://www.syncfusion.com/blogs/post/how-to-use-localization-in-an-asp-net-core-web-api.aspx]

      【讨论】:

        【解决方案3】:

        我正在使用 Visual Studio 2017(csproj 文件),这个解决方案对我有用: https://stackoverflow.com/a/39368856/812610

        Open Solution Explorer add files you want to embed. Right click on the files then click on Properties. In Properties window and change Build Action to Embedded Resource.

        嵌入资源的名称是“[DefaultNamespace].[Folder].filename”。我将证书(cert.pfx)保存到“资源”文件夹,所以对我来说它是“MyProjectName.Resources.cert.pfx”

        这已添加到我的.csproj

        <ItemGroup>
            <None Remove="Resources\testcert.pfx" />
          </ItemGroup>
        <ItemGroup>
            <EmbeddedResource Include="Resources\testcert.pfx" />
          </ItemGroup>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-09
          • 1970-01-01
          • 1970-01-01
          • 2010-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多