Don*_*ato 53 c# .net-core asp.net-core
我刚刚开始研究.Net Core,我没有看到经典资源和任何看似资源的东西.在经典的.Net类库中,我能够将带有一些脚本的文本过滤添加到我的项目中,而不是将这些文件添加到项目的资源中.之后我可以通过以下方式轻松使用它:
Connection.Execure(Properties.Resources.MySuperScript);
Run Code Online (Sandbox Code Playgroud)
我看到.Net Core库中没有这样的功能,至少我看不到.在.Net Core中是否有替代方法可以将一些静态数据存储为库中的嵌入式资源?如果它存在,如何使用它?
小智 80
更新:
.NET Core 1.1及更高版本已删除project.json并返回到.csproj文件.这改变了第2步,但不是那么多.必要的线条非常相似:
<ItemGroup>
<Content Remove="_fonts/OpenSans.ttf" />
<Content Remove="_fonts/OpenSans-Bold.ttf" />
<Content Remove="_fonts/OpenSans-Italic.ttf" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="_fonts/OpenSans.ttf" />
<EmbeddedResource Include="_fonts/OpenSans-Bold.ttf" />
<EmbeddedResource Include="_fonts/OpenSans-Italic.ttf" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
可能有类似的*.tff形式; 未经证实.
步骤1和3保持不变.
要在.NET Core 1.0项目中使用嵌入式资源,请执行以下操作:
1.-像往常一样添加您的嵌入文件.
示例:名为"_fonts"的目录上的一些FONT文件
2.-修改"project.json"以包含相关资源.
就我而言:
"buildOptions": {
"embed": {
"include": [
"_fonts/*.ttf"
]
}
},
Run Code Online (Sandbox Code Playgroud)
3.-访问代码中的嵌入式资源.
var assembly = typeof(MyLibrary.MyClass).GetTypeInfo().Assembly;
Stream resource = assembly.GetManifestResourceStream("MyLibrary._fonts.OpenSans.ttf");
Run Code Online (Sandbox Code Playgroud)
关键是在"GetManifestResourceStream"调用上使用正确的名称.您必须使用[程序集名称].[目录].[文件名].
希望它可以帮助那些人^ _ ^.
Dre*_*kes 46
现在project.json不推荐使用,您必须在.csproj文件中指定它.
<ItemGroup>
<EmbeddedResource Include="_fonts\*.ttf" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
您可以使用如图所示的通配符,也可以只显式列出文件.
Mar*_*ani 29
使用较新版本的 .Net Core - 2.0 或更高版本 - 有一个专门的类EmbeddedFileProvider可以抽象嵌入式文件读取。要使用它,请将Microsoft.Extensions.FileProviders.Embedded包添加到您的应用程序:
dotnet add package Microsoft.Extensions.FileProviders.Embedded
Run Code Online (Sandbox Code Playgroud)
将EmbeddedFileProvider允许您创建一个流阅读器,并使用根据您的情况:
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetExecutingAssembly());
using (var reader = embeddedProvider.GetFileInfo("yourfile.ext").CreateReadStream())
{
// some logic with stream reader
}
Run Code Online (Sandbox Code Playgroud)
人们通常已经回答了这个问题,所以这是将答案简化为简单的结果。
使用以下内容之前,应将文件作为嵌入式资源添加到.csproj / project.json
用法
var myJsonFile = ReadManifestData<Tests>("myJsonFile.json");
Run Code Online (Sandbox Code Playgroud)
方法
public static string ReadManifestData<TSource>(string embeddedFileName) where TSource : class
{
var assembly = typeof(TSource).GetTypeInfo().Assembly;
var resourceName = assembly.GetManifestResourceNames().First(s => s.EndsWith(embeddedFileName,StringComparison.CurrentCultureIgnoreCase));
using (var stream = assembly.GetManifestResourceStream(resourceName))
{
if (stream == null)
{
throw new InvalidOperationException("Could not load manifest resource stream.");
}
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39489 次 |
| 最近记录: |