У меня есть читатель DLL для извлечения ресурсов (изображений) из динамически создаваемой DLL.Для того, чтобы проверить это, я разработал DLL, чтобы указать требования, необходимые для моего читателя DLL для извлечения изображений.DLL работала как положено, так как я могу вручную включать изображения в папку ресурсов.Однако в процессе генерации динамической DLL я не совсем понимаю способ включения ресурсов в решение до его компиляции в DLL.
Итак, инструменты, которые у меня есть:
- DLLридер (работа)
- DLL с ресурсами изображения (работа)
- Динамически генерируемая DLL с ресурсом изображения (не работает)
(1) - (2) работыхорошо, (1) - (3) не удалось получить изображение
После отладки я обнаружил, что изображения не были добавлены в динамически добавляемую DLL.
Исходный код:
Изображения, включенные в ресурсы DLL, в пространстве имен с именем DLLforWPF
Когда я запускаю свое устройство чтения DLL, чтобы получить изображение и преобразовать его в BitmapImage, оно работает.
Assembly currentAssembly = Assembly.LoadFrom("DLLforWPF.dll");
string[] resources = currentAssembly.GetManifestResourceNames();
//Please see the attached image for the results
Stream myStream = currentAssembly.GetManifestResourceStream("DLLforWPF.Resources.img1.png");
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = myStream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
bitmap.Freeze();
Он отображает ресурсы, которые я добавил в DLL.
Затем я приступаю к разработке решения для динамического создания DLL с помощью imag.Электронные ресурсы.Я использовал stringbuilder для создания приведенного ниже кода:
//in stringbuilder
using System;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Dynamic;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Reflection;
using System.Windows.Forms;
namespace ben
{
public class Imgstored
{
[STAThread]
public static void Main(string[] args)
{
}
}
}
string executable = Application.ExecutablePath;
string baseDir = Path.GetDirectoryName(executable);
CodeDomProvider compiler = new CSharpCodeProvider(options.CompilerOptions);
CompilerParameters parameters = new CompilerParameters{ OutputAssembly = "ben.dll"};
parameters.WarningLevel = 4;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
if (compiler.Supports(GeneratorSupport.Resources))
{
parameters.EmbeddedResources.Add($"{Application.StartupPath}\\Temp\\audio.png");
}
Я попытался изменить каталог, такой как directory \ audio1.png, и он дал мне исключение из изображения, которое не найдено.Поэтому я уверен, что ресурс указывает на каталог изображений.
Когда я запускаю DLL reader,
Это результат моих ресурсов в динамически создаваемыхDLL.Я не могу преобразовать его в BitmapImage, так как это не ресурс изображения.Я подозреваю, что процесс добавления ресурса изображения в CSharpCodeProvider имеет какую-то ошибку, пожалуйста, сообщите мне проблему добавления ресурса с помощью CompilerParameters.EmbeddedResources.Add (путь к изображению).Результат полностью отличается от созданной вручную DLL.Есть очень ограниченный материал, касающийся добавления ресурсов в динамическую DLL через CSharpCodeProvider.Спасибо за ваше время.