Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net库(dll)优化_C#_.net_Compiler Construction - Fatal编程技术网

C# .net库(dll)优化

C# .net库(dll)优化,c#,.net,compiler-construction,C#,.net,Compiler Construction,我试图在我的项目中使用PDF库ITextSharp。ITextSharp有这么多功能,我甚至没有使用它的5%。我只是想知道,为什么我应该提供完整的dll文件,而我只使用它的5% 有没有办法将库静态链接到我的项目,并从库中删除所有未使用的方法和功能?无需修改源代码并构建自己的.dll,没有办法不发布整个内容。此外,如果您想创建自己的modified.dll,请注意可能涉及的任何许可问题(我不知道是否存在任何问题,但这肯定是您应该注意的)。最后,我想补充一句,我不知道iTextSharp.dll有多

我试图在我的项目中使用PDF库ITextSharp。ITextSharp有这么多功能,我甚至没有使用它的5%。我只是想知道,为什么我应该提供完整的dll文件,而我只使用它的5%


有没有办法将库静态链接到我的项目,并从库中删除所有未使用的方法和功能?

无需修改源代码并构建自己的.dll,没有办法不发布整个内容。此外,如果您想创建自己的modified.dll,请注意可能涉及的任何许可问题(我不知道是否存在任何问题,但这肯定是您应该注意的)。最后,我想补充一句,我不知道iTextSharp.dll有多大,但请你想想,它到底占用了多少空间,这是否真的很重要

  • 使用.NET DLL进行静态链接没有任何好处
  • 判断您只使用了库的5%是不容易的,库中可能使用了太多的内部代码来做很多肉眼看不到的小事情
  • 尽管iTextSharp是开源的,但您可以创建iTextSharp的分条版本,以便与您的项目一起发布
  • 顺便说一句,与非.net日所需的早期DLL相比,iTextSharp更小

  • 在这种情况下,最好的选择是下载代码的站点

    在许多情况下,它们使用条件编译来包括/排除某些片段。如果编写代码时没有考虑条件编译,那么您自己就很难做到这一点


    我个人不会重新编译源代码,除非有一个bug需要修复,您不能等待新版本。花在变更上的时间是在你的主要项目(你得到报酬的项目)上损失的时间

    如果要减小尺寸,有两个选项:模糊器或组件压缩器

    我没有为Java使用任何.Net模糊处理程序,所以我不能向您推荐任何模糊处理程序,但它们会像您假装的那样:删除未使用的方法和类


    或者,您可以创建一个包含所有所需程序集的压缩可执行文件,这些程序集在启动时会自动解压缩,就像流行的Aspack和UPX do for windows可执行文件一样。我已经试过了,并对结果感到满意。

    免责声明:我为我将要提到其产品的公司工作。我知道其他工具也可以做到这一点,但我只有这方面的直接经验

    无需修改任何ITextSharp源代码或执行您自己的自定义构建。仅使用bin目录中的程序集就可以实现所需的所有功能

    您可以使用Dotfuscator(删除选项)对整个应用程序执行静态分析,并输出仅包含应用程序中实际使用的代码的程序集。此外,您可以使用链接功能将DLL链接到exe中,以便只向客户发送一个文件。这可以大大减少应用程序占用空间。即使您选择不使用使应用程序更难破解和逆向工程的模糊功能,也可以利用所有这些功能

    Dotfuscator可以通过多种方式添加到构建过程中,我们直接将其集成到Visual Studio(版本2002到2010)中,这样您就可以构建您的解决方案,还可以在团队构建服务器上使用MSBuild任务(如果您选择不让构建服务器构建您的解决方案),以及任何其他构建系统的命令行版本

    Dotfuscator将处理任何.NET程序集类型,包括Silverlight程序集

    这些功能仅在Dotfuscator的Pro版本中可用,如果您联系PreEmptive Solutions,我们可以为您提供免费的、有时间限制的评估,以便您了解该产品如何为您服务


    如果您只想执行程序集链接,还可以使用Microsoft Research提供的实用程序将多个.NET程序集链接到单个程序集。

    我正在寻找一种自动化的方法。我所期望的是,编译器/工具应该自动删除函数“foo”,因为它在项目中的任何地方都没有引用。(假设未使用relection)。您是在尝试优化性能、内存还是仅优化安装的大小?删除你不打电话的代码对前两个没有帮助。+1是一个相关和全面的答案,尽管可能存在利益冲突。因为他指出了这一点,我认为不存在利益冲突。在这一点上,我不同意第1点,因为单个文件交付有很多优点。