在运行时加速加载程序集

Speeding up loading assemblies at runtime

我正在尝试使我的应用程序可移植,这意味着将我的依赖项嵌入到应用程序本身中。我正在使用此代码:

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 毫秒。有什么办法可以加快速度吗? 谢谢

您实际上是在对程序集使用动态加载。 您可以尝试静态链接您的可执行文件。

dotnet/ILMerge 将您的依赖程序集合并为一个程序集。

但有一些注意事项 - 语言资源程序集无法正常工作,您只能合并托管 DLL。

您始终可以使用命令行,但推荐的方法是将构建目标添加到您的项目文件中:

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

并构建:

msbuild /t:ILMerge