【问题标题】:Is it possible to remove unused code/assemblies in .NET?是否可以删除 .NET 中未使用的代码/程序集?
【发布时间】:2009-05-12 00:41:32
【问题描述】:

我的应用程序中有一个控件库,对于我正在开发的应用程序类型来说有点大。该库超过 2Mb,我几乎不使用它的功能,我会说我使用了它所有功能的 5% 到 10%。

是否可以从库中删除我的应用程序从不使用的代码?

P.S:这个库不是我开发的,也不是开源的(你可以购买代码)。

编辑: 我发布这个是因为我虽然可以使用 ILMerge 来实现,但这就是过去有人对我说的话......我尝试使用 ILMerge 但没有用,我不确定我是否正确使用它......

【问题讨论】:

标签: c# .net ilmerge


【解决方案1】:

我的老板使用混淆产品来做到这一点,将使用的代码放入组合程序集中。不过不记得它叫什么了,可能是 DotNet Reactor(我们在确定一个之前使用了几种不同的产品)。

【讨论】:

  • 我不记得它叫什么了,但是在 VS2008 中有一个精简的混淆器可以工作一点,我希望如果你购买了许可版本,它会大大减少代码大小。
  • 这样的功能可能需要花钱,不是吗?这对我来说是一个小小的不便,因此我不会付钱......
【解决方案2】:

有一个名为SmartAssembly 的产品可以做到这一点。至少对我来说有点贵。

【讨论】:

    【解决方案3】:

    请注意,请确保根据制作库的供应商公司的 EULA,您所做的事情是允许的。

    【讨论】:

      【解决方案4】:

      2Mb 并不大。

      如果你觉得它太多了,并且因为它是你的代码,你应该考虑将它重构为单独的程序集,仍然使用相同的命名空间。这样,您的代码就可以只引用它需要的程序集。

      【讨论】:

      • 当应用程序应该只有几个 kbs 时,这太多了,2mb 的附加代码太多了。而且库代码不是我的。
      • 2Mb 在任何具有至少 256 Mb 内存的现代计算机上都不算大,因为它是 虚拟 内存。不碰也不会占地方。
      【解决方案5】:

      如果它是开源的,您可以查看代码并有选择地取出您想要的内容并构建一个单独的程序集。

      如果它不是开源的,您可以在程序集中使用Reflector 并拧出您想要保留的代码(及其所有依赖项),然后在您自己的程序集中重新构建它。我不确定这有多合法。这可能取决于您图书馆的许可证。

      【讨论】:

      • 它不是开源的(见第一篇文章编辑),即使是,那也太费力了......
      • 不幸的是,ILMerge 恰恰相反(使程序集有更多代码...)
      【解决方案6】:

      您可以这样做,但需要一些编程。看看 mono cecil 项目,你可以打开程序集,删除不需要的类型并保存。编程涉及确定不使用哪些类型(A 类型使用 B 类型,因此如果您使用 A 类型,则应保留 B 类型)...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-19
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多