Ускорение загрузки сборок во время выполнения - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь сделать свое приложение переносимым, что означает встраивание моих зависимостей в само приложение. Я использую этот код:

AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
    string resource = nameof(x) + "." + new AssemblyName(e.Name).Name + ".dll";
    if (resource.EndsWith(".resources.dll"))
    {
        return null;
    }
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
    {
        byte[] data = new byte[stream.Length];
        stream.Read(data, 0, data.Length);

        Assembly assembly = Assembly.Load(data);
        return assembly;
    }
};

Для загрузки сборок во время выполнения. Тем не менее, это довольно медленно. От начала до события Form.Shown требуется около 1,2 секунды, а 400 мс загружаются сборками во время выполнения. Есть ли способ ускорить это? Спасибо.

1 Ответ

0 голосов
/ 14 апреля 2020

Вы используете динамическую загрузку c со сборками. Вы можете попробовать stati c, связывающий ваш исполняемый файл.

dotnet / ILMerge объединяет ваши зависимые сборки в одну сборку.

Однако есть некоторые предостережения - сборки языковых ресурсов не работают правильно, и вы можете объединять только управляемые библиотеки DLL.

Вы всегда можете использовать командную строку, но рекомендуется добавить цель сборки для вашего файла проекта:

  <Target Name="ILMerge">
    <Exec Command="ilmerge.exe /out:app.exe Assem1.dll Assem2.dll" />
  </Target>

и сборка с:

msbuild /t:ILMerge
...