Я пытаюсь встроить кучу библиотек DLL в мой исполняемый файл C #, используя costura fody, но у меня возникли некоторые проблемы с двумя библиотеками DLL.Я использую библиотеку NAudio и библиотеку NAudio.Lame, и хотя обе библиотеки DLL прекрасно компилируются в исполняемый файл, пакет NAudio.Lame добавляет библиотеки dll "libmp3lame.64.dll" и "libmp3lame.32.dll", которые яне в состоянии скомпилировать с exe.Я попытался добавить следующее в файл FodyWeavers.xml под узлом Costura:
<Unmanaged32Assemblies>
libmp3lame.32
</Unmanaged32Assemblies>
<Unmanaged64Assemblies>
libmp3lame.64
</Unmanaged64Assemblies>
XML не изменяет размер файла исполняемого файла, поэтому я предполагаю, что он ничего не сделал.
Я также попытался изменить «Build Action» библиотек DLL на «Embedded Resource», и, хотя размер исполняемого файла значительно увеличивается, я получаю DLLNotFoundExeption Runtime, если я запускаю программу без библиотек DLL в той же папке, что и exe.
РЕДАКТИРОВАТЬ: Теперь я заметил, что мне нужна только 64-битная DLL для запуска программы на моем компьютере, но я не могу добавить только эту DLL
EDIT2: Я попытался настроить событие для AssemblyResolve, используя следующий код:
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) {
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Client.libmp3lame.64.dll")) {
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
В этот раз он оставил исключение System.BadImageFormatExmat, так как я думаю этокод работает только для управляемых DLL.