Как встроить 7z.dll в exe?

476
06 февраля 2017, 14:35

args.Name Почему-то содержит = "Project_file_backup.resources, Version=1.0.0.0, Culture=ru-RU, PublicKeyToken=null"

И всегда: return null:

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        if (args.Name.StartsWith("7z"))
        {
            return Assembly.Load(Project1.Properties.Resources._7z);
        }
        else
            return null;
    }
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
var a = Assembly.Load(Project1.Properties.Resources._7z);           
SevenZipCompressor.SetLibraryPath(Path.Combine("", a.FullName));

{"Не удалось загрузить файл или сборку \"1073664 bytes loaded from Project_file_backup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\" либо одну из их зависимостей. Была сделана попытка загрузить программу, имеющую неверный формат."}

System.BadImageFormatException не обработано FileName=1073664 bytes loaded from Project_file_backup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null FusionLog="" HResult=-2147024885 Message=Не удалось загрузить файл или сборку "1073664 bytes loaded from Project_file_backup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Была сделана попытка загрузить программу, имеющую неверный формат.
Source=mscorlib StackTrace: в System.Reflection.RuntimeAssembly.nLoadImage(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence evidence, StackCrawlMark& stackMark, Boolean fIntrospection, SecurityContextSource securityContextSource) в System.Reflection.Assembly.Load(Byte[] rawAssembly) в MyProcess.FileBackup.AddToArchive2(String[] fileNames, String archiveName) ... в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) в System.Threading.ThreadHelper.ThreadStart() InnerException: HResult=-2147024885 Message=Неправильный формат IL. InnerException:

Вариант2

public static void Load(string name)
    {
        String resourceName = "app1." +
        new AssemblyName(name).Name + ".dll";
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
        {
            Byte[] assemblyData = new Byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            Assembly.Load(assemblyData);
        }
    }

...

        Load(@"Resources\7z.dll");
        //var currentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        //SevenZipCompressor.SetLibraryPath(Path.Combine(currentDir, @"Resources\7z.dll"));
        SevenZipCompressor.SetLibraryPath(Path.Combine(currentDir, ???Что здесь писать?));
        //???Что здесь писать

Смотрю как делают здесь:

http://www.sql.ru/forum/868852/kak-sdelat-takoy-appdomain-currentdomain-assemblyresolve

https://blogs.msdn.microsoft.com/microsoft_press/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition/#comments

http://www.cyberforum.ru/attachments/433016d1410669282

READ ALSO
Модульное тестирование в C#

Модульное тестирование в C#

Как правильно протестировать Data access layer с помощью Mock, а именно репозитории, предоставляющие доступ к базе данных через контекст?

424
R*-tree реализация на C# [требует правки]

R*-tree реализация на C# [требует правки]

Хоть и есть несколько статей на хабре, есть реализация на C++, не могу понять как переделать это под С#Может быть вдруг кто-то реализовал?

436
Как получить письма пользователя gmail?

Как получить письма пользователя gmail?

Добрый день! Мне нужно получить gmail письма пользователяПрограмма открывает ссылку авторизации в WebBrowser, пользователь входит, я получаю код

416
Представление decimal в C#

Представление decimal в C#

Добрый день, нужно узнать, как хранится тип decimal в C#Побитово, т

444