RSCG – ThisAssembly_Resources
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