我可以发布不带编译所需但运行时不需要的 DLL 的 .NET 服务吗?

Can I ship a .NET service without DLLs that are required to compile but are not needed at runtime?

我有一个需要一个依赖项的 .NET 服务项目(我们称之为 A.dll)。 A.dll 需要 B.dll,如果我的项目中没有 B.dll,Visual Studio 会抱怨并无法构建。但是我没有在我的程序中使用 B.dll 里面的任何东西。如果我用 A.dll 和 B.dll 编译我的项目但只用 A.dll 运送我的项目可以吗?

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

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

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

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

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

"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。