Lexical.FileProvider.Dll
DllFileProvider.OpenFile(string) opens .dll files. This library uses Mono.Cecil NuGet package.
DllFileProvider fileProvider = DllFileProvider.OpenFile("Lexical.Localization.Tests.dll");
Another constructor is DllFileProvider.UseStream(Stream).
// Open some stream
Stream stream = new FileStream("Lexical.Localization.Tests.dll", FileMode.Open);
// Use stream as dll file.
DllFileProvider fileProvider = DllFileProvider.UseStream(stream).AddDisposable(stream);
List all embedded resources.
foreach (string embeddedResource in fileProvider.ListAllPaths().OrderBy(s=>s))
Console.WriteLine(embeddedResource);
Looks like this.
Lexical.Localization.Tests.localization.ini
Lexical.Localization.Tests.localization.json
Lexical.Localization.Tests.Localization.localization.ini
Lexical.Localization.Tests.Localization.localization-en.ini
Lexical.Localization.Tests.Localization.localization-fi.ini
...
File provider must be disposed after use.
fileProvider.Dispose();
Belated disposing can be added to the file provider. The disposable will be disposed once the fileprovider and all its streams are closed.
// Create file provider
DllFileProvider fileProvider = DllFileProvider.OpenFile("Lexical.Localization.Tests.dll");
// Add disposable for belated dispose
fileProvider.AddBelatedDispose(new _Disposable_());
// Open stream
Stream s = fileProvider
.GetFileInfo("Lexical.Localization.Tests.Localization.localization-en.ini")
.CreateReadStream();
// Dispose file provider
fileProvider.Dispose();
// Dispose the open stream -- _Disposable_ is disposed here.
s.Dispose();
Package Loader
Lexical.FileProvider.PackageLoader.Dll can be used as a component of PackageFileLoader, making it possible to drill down into embedded resources of .dll files. Lexical.FileProvider.PackageLoader.Exe can open embedded resources of managed .exe files.
// Create root file provider
PhysicalFileProvider root = new PhysicalFileProvider(Directory.GetCurrentDirectory());
// Create package options
IPackageFileProviderOptions options =
new PackageFileProviderOptions()
.AddPackageLoaders(
Lexical.FileProvider.PackageLoader.Dll.Singleton,
Lexical.FileProvider.PackageLoader.Exe.Singleton
);
// Create package file provider
IPackageFileProvider fileProvider = new PackageFileProvider(root, options).AddDisposable(root);