3

好的,我有一个我开发的应用程序,我们称之为 Project A。我放入共享库中的 Microsoft .NET Framework 中找不到的函数,我们称之为 MyLib。

现在项目 B、C、D、E 也使用 MyLib(很多项目)。我的“MyLib”已经慢慢添加了 4 或 5 年了。

我现在遇到的问题是 MyLib很大。嗯,5MB,但我称之为巨大。

我的问题是我应该,我可以,以及如何使用 MyLib 编译我的项目,但从 MyLib 中删除未使用的函数、类等?我的 Hello World 应用程序使用 MyLib 中的 1 个微小静态函数会导致 6MB HelloWorld.exe(在 ilmerge 之后),这让我感到很震惊。

FOSS > 付费软件。

4

4 回答 4

3

您正在搜索的是Mono Linker,它的源代码在 GitHub 上。独立工具不经常使用,但由于它是他们的 iPhone 编译器的一个步骤,我猜这些库是坚如磐石的。

因为您并不总是使用您用于程序的库的所有功能。通过使用链接器,您可以减少必须分发给用户的内容的大小。

于 2011-02-27T16:43:45.253 回答
0

看起来您需要将库函数分组为较小的部分。而不是带着你笨重的瑞士军刀。只需将其分解为更小的部分。

“最佳实践”是用单元测试覆盖你的 mylib 并慢慢地重构这些类。

“最佳实践”将把它们分开。查看 .net 框架。没有一个巨大的 dot.dll

于 2011-02-27T16:27:10.617 回答
0

从 .Net 框架本身中获取一些线索。如果 MyLib 有很多 Text 辅助对象和函数以及很多 Web 辅助对象和函数,则将它们分成两个单独的项目和命名空间。

当然,我只推荐这个,因为它似乎打扰了你。就我个人而言,我有比一些稍微超大的 DLL 更大的烦恼。

既然您说它使 VS 运行速度变慢,我假设您的意思是您包括项目 MyLib 而不仅仅是 DLL。我会立即停止这样做。运行 MyLib 的构建并简单地包含对 DLL 的引用。

于 2011-02-27T16:28:50.563 回答
0

AFAIK,只有痛苦的方式:将您的库拆分为功能部分。这将意味着通过使用 MyLib 并添加适当的新引用的各种项目,但我没有看到其他方式。这也是棘手的部分:确定这些功能单元的边界。如果您不小心,您最终可能会(即)引用 6 个不同的程序集,而以前只有一个程序集,从而使事情变得更糟。

在你走这条路之前,非常仔细地评估你的项目使用和不使用的东西。

于 2011-02-27T16:35:45.543 回答