Die folgende Methode KEINE externen Werkzeuge verwenden et AUTOMATISCH alle benötigten DLLs einbinden (keine manuellen Maßnahmen erforderlich, alles wird bei der Kompilierung erledigt)
Ich habe hier viele Antworten gelesen, die besagen, dass man die ILMerge , ILRepack o Jeffrey Ritcher Methode, aber nichts davon funktionierte mit WPF-Anwendungen noch einfach zu bedienen war.
Wenn Sie viele DLLs haben, kann es schwierig sein, die benötigten DLLs manuell in Ihre Exe einzubinden. Die beste Methode, die ich gefunden habe, wurde von Wegged erklärt hier auf StackOverflow
Der Klarheit halber habe ich seine Antwort hierher kopiert (alle Anerkennung an Wegged )
1) Fügen Sie dies zu Ihrem .csproj
Datei:
<Target Name="AfterResolveReferences">
<ItemGroup>
<EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
<LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
</EmbeddedResource>
</ItemGroup>
</Target>
2) Machen Sie Ihr Main Program.cs
sehen so aus:
[STAThreadAttribute]
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;
App.Main();
}
3) Fügen Sie die OnResolveAssembly
Methode:
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = new AssemblyName(args.Name);
var path = assemblyName.Name + ".dll";
if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false) path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path);
using (Stream stream = executingAssembly.GetManifestResourceStream(path))
{
if (stream == null) return null;
var assemblyRawBytes = new byte[stream.Length];
stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
return Assembly.Load(assemblyRawBytes);
}
}