带有资源文件的asp.net核心(resx)

时间:2016-11-11 15:23:27

标签: c# asp.net-core

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

因此,我使用Visual Studio(Add> New Item> Resources File)创建一个名为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

但结果是一样的。

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

3 个答案:

答案 0 :(得分:2)

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

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

只需要在项目上创建一个文件夹(在我的情况下为Resources),然后在project.json中,我包含以下代码:

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

然后,我的代码:

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

答案 1 :(得分:1)

如果您使用的是.net core 3.1 API,则可以-

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

  2. 在项目中添加Resource文件,例如Resource.en-US.resx,在Name中添加TestKey,在Value列中添加Hello,以进行测试。

  3. 添加与Resource.cs相同名称的类文件

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

    私有只读IStringLocalizer _localizer;

并将其注入构造函数中

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

答案 2 :(得分:0)

我使用的是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.

嵌入资源的名称是&#34; [DefaultNamespace]。[Folder] .filename&#34;。我将证书(cert.pfx)保存到&#34;资源&#34;文件夹对我来说它是&#34; MyProjectName.Resources.cert.pfx&#34;

这已添加到我的.csproj

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