【问题标题】:Merging multiple C# dlls into one and exporting the merged dll for use in another project将多个 C# dll 合并为一个并导出合并的 dll 以在另一个项目中使用
【发布时间】:2013-03-15 16:08:25
【问题描述】:

我有一个用于 Windows Phone 8 (VS 2012 Pro) 的大型 C# 解决方案,由 12 个项目组成,这些项目使用独立存储和几个外部库,如 Newtonsoft.JSON、RestSharp、Unity for Dependency Injection 等

其中一个项目公开了几个功能接口并充当主项目。我想将解决方案中所有项目产生的所有 DLL 合并到一个 DLL 中,并在另一个项目中使用它。

我正在寻找类似于 C++ 静态库的东西。我想包含所有 DLL 中的所有代码,包括我正在使用的第 3 方 DLL 中的代码。

最终目的是将我合并的 DLL 用作其他项目的可分发 DLL。

我怎样才能正确地做到这一点?

我已尝试使用 ILMerge 命令行,但它会引发错误,因为我使用的是独立存储。我还尝试使用 ILMergeGUI,它似乎接受了我使用独立存储的事实,但是当我尝试使用生成的 DLL 时,我收到与我的第 3 方 DLL 相关的“未找到”错误。

有什么想法吗?将解决方案中的所有项目合并为一个是可能的,但不是首选(另外我仍然需要静态包含第 3 方 DLL)。

【问题讨论】:

    标签: c# dll windows-phone-8 ilmerge


    【解决方案1】:

    【讨论】:

    • 博文中建议的方法对EXE文件有用,而不是创建一个DLL文件。但是,在帖子下的 cmets 中建议了一些解决方法:“我能想到的最佳选择是让 EXE(或主机)显式调用非嵌入式库中的一些初始化方法,以便该方法可以注册它对AssemblyResolve 事件。另一种选择是使用某种单例模式在程序集代码中的各个位置注册事件。也就是说,如果 DLL 尚未注册事件,则不要这样做。(。 ..)"
    • Windows Phone 8 不是 WPF,它基于 Silverlight(带有一些 WinRT 和 XNA),并且每个应用程序都是 DLL 而不是 EXE...并不是说这从“否”的答案改变了这一点.
    • @PaulAnnetts,所以 WinRT 不再属于托管 dll,有什么建议可以实现所需的结果吗?谢谢
    • 那篇博文是我的第一站:D 不幸的是,Windows Phone 的 .Net 中不提供 AssemblyResolve。我尝试组合的所有 DLL 都是 WP Dll。现在,如果有任何方法可以在 WP 中使用普通的 .Net 代码,或者我可以以某种方式在普通的 .Net 中创建我的 SDK 并在 WP 应用程序中使用它,那么该解决方案可能是可行的。知道该怎么做吗?
    • 我已经下载了 .Net Reactor 的试用版,它成功地合并了我的 DLL,但我在 mscorlib.ni.dll 上收到了 System.TypeLoadException - 知道这通常是什么原因造成的吗?我所有的 dll 都具有相同的运行时版本(4.0),包括我的第 3 方(我重新编译了它们)。访问返回某些内容的函数时会发生此错误。返回现成实例的对象调用工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多