RSCG – ThisAssembly_Resources
| name | ThisAssembly_Resources |
| nuget | https://www.nuget.org/packages/ThisAssembly.Resources/ |
| link | https://www.clarius.org/ThisAssembly/ |
| author | Daniel Cazzulino |
Embed resources to file
This is how you can use ThisAssembly_Resources .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="Content/mytext.sql" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ThisAssembly.Resources" Version="1.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
Console.WriteLine(ThisAssembly.Resources.Content.mytext.Text);
This is from file
The code that is generated is
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// ThisAssembly.Resources: 1.4.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.IO;
partial class ThisAssembly
{
public static partial class Resources
{
public static partial class Content
{
/// <summary>
/// => @"Content\mytext.sql"
/// </summary>
public static partial class mytext
{
private static string text;
public static string Text => text ??= EmbeddedResource.GetContent(@"Content\mytext.sql");
public static byte[] GetBytes() => EmbeddedResource.GetBytes(@"Content\mytext.sql");
public static Stream GetStream() => EmbeddedResource.GetStream(@"Content\mytext.sql");
}
}
}
}
using System;
using System.IO;
using System.Linq;
using System.Reflection;
static class EmbeddedResource
{
static readonly string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
public static string GetContent(string relativePath)
{
using var stream = GetStream(relativePath);
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
public static byte[] GetBytes(string relativePath)
{
using var stream = GetStream(relativePath);
var bytes = new byte[stream.Length];
stream.Read(bytes,0,bytes.Length);
return bytes;
}
public static Stream GetStream(string relativePath)
{
var filePath = Path.Combine(baseDir,Path.GetFileName(relativePath));
if (File.Exists(filePath))
return File.OpenRead(filePath);
var baseName = Assembly.GetExecutingAssembly().GetName().Name;
var resourceName = relativePath
.TrimStart('.')
.Replace('/','.')
.Replace('\\','.');
var manifestResourceName = Assembly.GetExecutingAssembly()
.GetManifestResourceNames().FirstOrDefault(x => x.EndsWith(resourceName));
if (string.IsNullOrEmpty(manifestResourceName))
throw new InvalidOperationException($"Did not find required resource ending in '{resourceName}' in assembly '{baseName}'.");
return
Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName) ??
throw new InvalidOperationException($"Did not find required resource '{manifestResourceName}' in assembly '{baseName}'.");
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/ThisAssembly_Resources
Leave a Reply