在vs 2017.3预览版3中,我创建了一个包含三个项目的解决方案:Netstandard2库(.Net Standard v2.0预览版),Console应用程序A(.Net框架版)和控制台应用程序B(.Net核心版)
两个控制台应用程序都引用Netstandard2库。
当我构建解决方案时,我发现Netstandard2的所有程序集(96 dll文件)都被复制到Console应用程序A的bin文件夹中,而对于Console应用程序B(.Net核心)则不会被复制。
将所有这些96 dll复制到bin文件夹是否正常?
我需要将依赖于Netstandard类库的控制台应用程序A部署到新的品牌机器(Windows 7 x86)?我是否需要同时安装.net 4.6.1 + dotnet-sdk2?
答案 0 :(得分:3)
我已将问题发布到Github dotnet.standard project
所有赠送金额均转至@weshaggard和@terrajobst
目前,该项目的作者不会对工具附带的compat垫片进行任何智能修剪,因此最终会将它们全部复制。
如果依赖项不依赖它们,那么删除/不部署它们是安全的,但盲目地执行它可能会破坏某些依赖项。
有a tool他们正在努力从输出中修剪不必要的二进制文件:
此外,项目作者,部署什么是安全的。 .NET Standard 1.x需要所有这些文件。如果仅使用以.NET Standard 2.0+为目标的二进制文件,则可以使用较少的文件。
但是,仍然存在netstandard.dll之外的一些额外文件(例如System.Net.Http,System.ValueTuple,System.Runtime.InteropServices.RuntimeInformation,System.Data.Common)。
可以手工进行子集,但正如韦斯所说:应该测试应用程序。
值得一提的是,使用.NET Framework 4.7.1及更高版本,您无需为.NET Standard部署任何额外文件。今天,如果你的目标是Xamarin或.NET Core,情况已经如此。
中找到完整的讨论