Встраивание.dll в.exe

Возможный дубликат:
Вставить.net DLL в C#.exe

Я пытался встроить.dll (в частности, Ionic.Zip.dll) в мое приложение, которое затем компилирует новый.exe с использованием CodeDom и требует Ionic.Zip.dll. Я хочу иметь возможность распространять мою программу без каких-либо дополнительных.dll. Если в рабочем каталоге есть DLL, программа и скомпилированная программа работают нормально. Я не использую ILMerge, потому что скомпилированная программа требует.dll, и я не могу заставить пользователей получить ILMerge. Однако, если нет.dll, я получаю эту ошибку.

Исходная программа не скомпилирует код с этой ошибкой

error CS0006: Metadeta file 'Ionic.Zip.dll" could not be found.

Скомпилированная программа (скомпилирована при наличии dll в рабочем каталоге исходной программы)

Description:
Stopped working

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01:   scrub.exe
Problem Signature 02:   0.0.0.0
Problem Signature 03:   50b0f364
Problem Signature 04:   Scrub
Problem Signature 05:   0.0.0.0
Problem Signature 06:   50b0f364
Problem Signature 07:   1
Problem Signature 08:   38
Problem Signature 09:   System.IO.FileNotFoundException
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1033

Ошибка отладки

Could not load file or assembly 'Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c' or one of its dependencies. The system cannot find the file specified.

В компиляторе CodeDom я использовал этот код:

Params.ReferencedAssemblies.Add("Ionic.Zip.dll");

Чтобы исправить это, я попробовал это и следовал этому так близко, как мог. http://adamthetech.com/2011/06/embed-dll-files-within-an-exe-c-sharp-winforms/

Вот мой код в оригинальном приложении:

        public MainWindow()
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {
            string resourceName = new AssemblyName(args.Name).Name + ".dll";
            string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
            {
                Byte[] assemblyData = new Byte[stream.Length];
                stream.Read(assemblyData, 0, assemblyData.Length);
                return Assembly.Load(assemblyData);
            }
        };

        InitializeComponent();

        inniZip();
     }

    private void inniZip()
    {
        Ionic.Zip.ZipOption test = new Ionic.Zip.ZipOption();
    }

Я также поместил подобный код в исходный код скомпилированной программы. Я застрял на этой ошибке какое-то время, и я просто не могу понять это.

Заранее спасибо,

0 ответов

Другие вопросы по тегам