将C#DLL合并到.EXE中

卡尔·舒曼

我知道对此主题有很多答复,但是我在此答复中找到的示例代码不适用于每个.dll。

我用了这个例子。

public App()
    {
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);
    }

    static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
    {
        //We dont' care about System Assemblies and so on...
        if (!args.Name.ToLower().StartsWith("wpfcontrol")) return null;

        Assembly thisAssembly = Assembly.GetExecutingAssembly();

        //Get the Name of the AssemblyFile
        var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";

        //Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder
        var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
        if (resources.Count() > 0)
        {
            var resourceName = resources.First();
            using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null) return null;
                var block = new byte[stream.Length];
                stream.Read(block, 0, block.Length);
                return Assembly.Load(block);
            }
        }
        return null;
    }

当我创建一个只有一个窗口和一个小窗口的小程序时,它起作用了,但是对于我的“大” dll,它却没有起作用。“大” dll上的设置与我的小程序中的设置相同。

我无法想象为什么它有时会起作用,有时却不起作用。我也使用ICSharp.AvalonEdit.dll对其进行了测试,但未成功。

谁能想象错误在哪里?

编辑1

当我启动程序时,它说找不到我的dll。

编辑2

我认为我已成为我问题的核心。如果要合并的dll之一包含对其他dll的引用,则我将成为此FileNotFoundException异常。有人知道如何加载/添加内部所需的dll吗

编辑3

当我使用JiříPolášek的代码时,它对某些人有用。我的Fluent显示错误“请在样式中附加ResourceDictionary。但是我已经在我的计算机中完成了此操作。App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Office2010/Silver.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources> 
吉里·波拉什克(JiříPolášek)

如果引用的程序集需要其他程序集,则还必须在应用程序中包括它们-在应用程序文件夹中或作为嵌入式资源。您可以使用Visual Studio,IL Spy,dotPeek确定引用的程序集,也可以使用method编写自己的工具Assembly.GetReferencedAssemblies

AssemblyResolve在将ResolveAssembly处理程序附加事件之前,也可能会触发事件附加处理程序应该是您在Main方法中要做的第一件事。在WPF中,您必须使用新的Main方法创建新类,并将其设置为项目设置中的Startup对象

public class Program
{
    [STAThreadAttribute]
    public static void Main()
    {
        AppDomain.CurrentDomain.AssemblyResolve
            += new ResolveEventHandler(ResolveAssembly);
        WpfApplication1.App app = new WpfApplication1.App();
        app.InitializeComponent();
        app.Run();
    }

    public static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
    {   
      // check condition on the top of your original implementation
    }
}

您还应该在的顶部检查防护条件,ResolveAssembly以不排除任何引用的部件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#WPF将DLL和.exe合并到一个文件

来自分类Dev

VBScript中的C#DLL,无需重装

来自分类Dev

c#asp.net mvc5,将js嵌入到c#dll中

来自分类Dev

如何将大量数字合并到C ++代码中

来自分类Dev

使用本机/托管环境将免注册COM清单嵌入到C#dll中

来自分类Dev

将托管C#DLL包含到非托管C ++ DLL中-全部集中在一个文件中

来自分类Dev

将托管的C#DLL包含到非托管的C ++ DLL中-全部集中在一个文件中

来自分类Dev

使用cygwin + mingw32将“ o”文件合并到dll中

来自分类Dev

如何将位于不同文件夹中的C#dll引用到使用该DLL公开的接口的不同文件夹中的C#winforms exe

来自分类Dev

如何将位于不同文件夹中的C#dll引用到使用该DLL公开的接口的不同文件夹中的C#winforms exe

来自分类Dev

列出C#DLL中的类和函数头

来自分类Dev

无法从SYSPRO中的VBscript调用C#dll

来自分类Dev

C#DLL库中的String.ToLower

来自分类Dev

将数据框合并到列表中

来自分类Dev

将执行日志合并到报告中

来自分类Dev

将列表值合并到字典中

来自分类Dev

将Ksh功能合并到Zsh中?

来自分类Dev

javascript将变量合并到数组中

来自分类Dev

将结果合并到JSON对象中

来自分类Dev

将AWK合并到perl中

来自分类Dev

如何将查找表中的时变参数合并到boost :: odeint中,C ++

来自分类Dev

如何将查找表中的时变参数合并到boost :: odeint中,C ++

来自分类Dev

在C#exe中包含Dll

来自分类Dev

如何在C ++中隐藏exe dll?

来自分类Dev

在C#exe中包含Dll

来自分类Dev

Launch4J-主jar,将所有依赖项合并到一个exe中

来自分类Dev

将托管程序合并到非托管C ++可执行文件中

来自分类Dev

如何将数据合并到表中 c# SQL

来自分类Dev

我可以在非托管Delphi EXE中使用托管C#DLL吗?

Related 相关文章

  1. 1

    C#WPF将DLL和.exe合并到一个文件

  2. 2

    VBScript中的C#DLL,无需重装

  3. 3

    c#asp.net mvc5,将js嵌入到c#dll中

  4. 4

    如何将大量数字合并到C ++代码中

  5. 5

    使用本机/托管环境将免注册COM清单嵌入到C#dll中

  6. 6

    将托管C#DLL包含到非托管C ++ DLL中-全部集中在一个文件中

  7. 7

    将托管的C#DLL包含到非托管的C ++ DLL中-全部集中在一个文件中

  8. 8

    使用cygwin + mingw32将“ o”文件合并到dll中

  9. 9

    如何将位于不同文件夹中的C#dll引用到使用该DLL公开的接口的不同文件夹中的C#winforms exe

  10. 10

    如何将位于不同文件夹中的C#dll引用到使用该DLL公开的接口的不同文件夹中的C#winforms exe

  11. 11

    列出C#DLL中的类和函数头

  12. 12

    无法从SYSPRO中的VBscript调用C#dll

  13. 13

    C#DLL库中的String.ToLower

  14. 14

    将数据框合并到列表中

  15. 15

    将执行日志合并到报告中

  16. 16

    将列表值合并到字典中

  17. 17

    将Ksh功能合并到Zsh中?

  18. 18

    javascript将变量合并到数组中

  19. 19

    将结果合并到JSON对象中

  20. 20

    将AWK合并到perl中

  21. 21

    如何将查找表中的时变参数合并到boost :: odeint中,C ++

  22. 22

    如何将查找表中的时变参数合并到boost :: odeint中,C ++

  23. 23

    在C#exe中包含Dll

  24. 24

    如何在C ++中隐藏exe dll?

  25. 25

    在C#exe中包含Dll

  26. 26

    Launch4J-主jar,将所有依赖项合并到一个exe中

  27. 27

    将托管程序合并到非托管C ++可执行文件中

  28. 28

    如何将数据合并到表中 c# SQL

  29. 29

    我可以在非托管Delphi EXE中使用托管C#DLL吗?

热门标签

归档