Asp.net核心与资源文件(resx)

本文关键字:resx 源文件 资源 net 核心 Asp | 更新日期: 2023-09-27 18:17:23

我有一个项目在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

,但结果是一样的。

如果我在控制台应用程序上编写这段代码,一切都能正常工作。

Asp.net核心与资源文件(resx)

我找到了另一种解决我问题的方法。

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

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

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

然后,我的代码:

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

如果你正在使用。net core 3.1 api,你可以-

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

  2. 在项目中添加Resource.en- us文件。在Name和Value列中分别添加TestKey和Hello,用于测试。

  3. 添加一个与Resource.cs同名的类文件

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

    private readonly IStringLocalizer _localizer;

并注入构造函数-

public TestController(IStringLocalizer<Resource> localizer)
        {            
            _localizer = localizer;
        }
  • 读取资源名的值为-_localizer["TestKey"],您将获得Hello(即在步骤#2中输入)更多详情请访问- [https://www.syncfusion.com/blogs/post/how-to-use-localization-in-an-asp-net-core-web-api.aspx]
  • 我使用的是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>