【问题标题】:Can I ship a .NET service without DLLs that are required to compile but are not needed at runtime?我能否提供一个没有 DLL 的 .NET 服务,这些 DLL 需要编译但在运行时不需要?
【发布时间】:2021-07-27 10:34:55
【问题描述】:

我有一个 .NET 服务项目,它需要一个依赖项(我们称之为 A.dll)。 A.dll 需要 B.dll,如果我的项目中没有 B.dll,Visual Studio 会抱怨并且无法构建。但我没有在我的程序中使用 B.dll 中的任何内容。如果我同时使用 A.dll 和 B.dll 编译我的项目,但只使用 A.dll 发布我的项目,可以吗?

根据我的测试,该服务仅使用 A.dll 即可正常运行(毕竟,我没有使用 B.dll 中的任何内容),但我想知道这样做是否存在我没​​有看到的问题。

更新:我的目标是减少交付给客户的整体应用程序大小。

【问题讨论】:

  • 为什么 Visual Studio 会抱怨?错误信息是什么?
  • 在构建时,如果我没有所有 DLL,它会抛出找不到命名空间/类型的错误。
  • 如果是关于未找到的类型,那么如果您使用该类型,则必须具有此 DLL。

标签: .net dll service dependencies runtime


【解决方案1】:

这可能没问题,但我不建议将其作为良好做法。

如果您只是想减少文件数量,请尝试使用 ILMerge 将两个 DLL 编译到生成的 EXE 中。

您可以使用以下命令将其添加为构建后事件:

"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe" /target:winexe /out:temp.exe $(TargetName).exe A.dll B.dll

rename temp.exe $(TargetName).exe

您拥有的另一个选项是反编译 A 并通过删除所有您不使用的需要 B 的方法来删除 B 的依赖项。

为此,您可以使用 ILSpy。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2020-08-28
    相关资源
    最近更新 更多