我可以发布不带编译所需但运行时不需要的 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。
我有一个需要一个依赖项的 .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。