.Net Coreの調査を始めたばかりですが、古典的なリソースやリソースのように見えるものは見当たりません。古典的な.Netクラスライブラリでは、たとえば、スクリプトを含むテキストフィルトをプロジェクトに追加できました。これらのファイルをプロジェクトのリソースに追加することはできませんでした。その後、次の方法で簡単に使用できます。
Connection.Execure(Properties.Resources.MySuperScript);
.Net Coreライブラリにはこのような機能はないようです。少なくとも私にはわかりません。いくつかの静的データをライブラリの埋め込みリソースとして保存するための代替手段が.Net Coreにありますか?そして、それが存在する場合、それをどのように使用しますか?
UPDATE:
.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>
同様の*.tff
フォームがある場合があります。未確認。
手順1と3は変更されていません。
.NET Core 1.0プロジェクトで埋め込みリソースを使用するには、次の手順を実行します。
1.-通常どおり、埋め込みファイルを追加します。
例:「_fonts」という名前のディレクトリにあるいくつかのFONTファイル
2.-「project.json」を変更して、関連リソースを含めます。
私の場合:
"buildOptions": {
"embed": {
"include": [
"_fonts/*.ttf"
]
}
},
3.-コード内の埋め込みリソースにアクセスします。
var Assembly = typeof(MyLibrary.MyClass).GetTypeInfo().Assembly;
Stream resource = Assembly.GetManifestResourceStream("MyLibrary._fonts.OpenSans.ttf");
重要な点は、「GetManifestResourceStream」呼び出しで正しい名前を使用することです。 [アセンブリ名]。[ディレクトリ]。[ファイル名]を使用する必要があります。
それが誰かを助けることを願っています^ _ ^。
project.json
が廃止されたので、.csproj
ファイルでこれを指定する必要があります。
<ItemGroup>
<EmbeddedResource Include="_fonts\*.ttf" />
</ItemGroup>
図のようにワイルドカードを使用するか、ファイルを明示的にリストするだけです。
人々はすでに一般的にこれに答えているので、これは答えを単純なものにレンダリングしたものです。
以下を使用する前に、ファイルを埋め込みリソースとして。csproj/project.json
使用法
var myJsonFile = ReadManifestData<Tests>("myJsonFile.json");
メソッド
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();
}
}
}
.Net Coreの新しいバージョン-2.0以降では、埋め込みファイルの読み取りを抽象化する特殊なクラスEmbeddedFileProvider
があります。使用するには、アプリケーションにMicrosoft.Extensions.FileProviders.Embedded
パッケージを追加します。
dotnet add package Microsoft.Extensions.FileProviders.Embedded
EmbeddedFileProvider
を使用すると、ストリームリーダーを作成し、シナリオに従って使用できます。
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetExecutingAssembly());
using (var reader = embeddedProvider.GetFileInfo("yourfile.ext").CreateReadStream())
{
// some logic with stream reader
}