Habe die Historie des Forums und etliche Google Anfragen gestartet, leider ohne Erfolg. Vielleicht könnt ihr mir einen Rat geben:
Ich möchte gerne diverse Dlls von Drittanbietern in eine EXE einer WPF-Anwendung integrieren, analog dem oben genannten Artikel. Hierzu soll die DLL in die EXE eingebunden werden und durch das AssemblyResolve Event gefunden werden.
Meine Vorgehensweise:
Ich habe zusätzlich zum Verweis der DLL die Dll selbst zum Projekt hinzugefügt (hinzufügen -> vorhandenes Element) und den Build-Vorgang auf eingebettete Ressource umgestellt.
Folgenden Code habe ich verwendet:
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Simple
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
InitializeComponent();
Test();
}
private void Test()
{
DLLClass Test = new DLLClass(); //hierzu ist die DLL notwendig
}
}
}
Ich bin mir nicht sicher ob die Position von AssemblyRessolve in dieser WPF-Anwendung die richtige ist. Zumindest wird diese ausgeführt, bevor
das Testobject initiiert wird.
Nun gehe ich in mein Debugverzeichnis und lösche die DLL, die das Programm ja benötigt. Die Anwendung kann ohne die DLL nicht ordnungsgemäß gestartet werden, obwohl ich an der Dateigröße der EXE sehe, dass die dll integriert sein muss.
Ich nehme an, dass ich das AssemblyResolve Event woanders hinterlegen muss?
Bin für Hinweise dankbar.
Amosius