构建包含10行代码并依赖Zerozero和Newtonsoft.json的应用程序时,它在我的bin发行版Directoy中生成大约104个dll,其中很多是System。。 dll。
为什么?如何减少到3个dll?一个用于我的库,一个用于zeroconf,一个用于Newtonsoft.Json。
答案 0 :(得分:2)
这是.net标准2.0 / net 4.6 / 4.7.1问题,在4.7.2中得到了改进:
“在.NET Framework 4.7.2中,我们解决了已知的运行时问题 .NET Standard 2.0。我们对运行时进行了更改以确保 您不需要与.NET标准库一起部署其他文件”
因此,运行Visual Studio 2017安装程序并安装.Net Framework 4.7.2和目标包,并将您的应用程序定位为.net 4.7.2。
答案 1 :(得分:0)
C#IDE为此提供了一个选项“ Specific Version = False”。在C ++ / CLI IDE中不可用。坦白说,这不是一个真正的问题。您可能错误地使用了[AssemblyVersion]属性。该版本与程序集中的公开可见类相关联。如果您对这些类的公共成员进行了任何更改,则可能会发生重大更改,从而使依赖于这些类的代码失败。
此时,您应该更改[AssemblyVersion]。使用该程序集的任何项目都必须更新其参考程序集,并且必须重新编译。
如果不进行其他重大更改,例如错误修复或不可见类中的调整,将生成一个新文件,该文件与使用该文件的任何项目完全兼容。您应该更新[AssemblyFileVersion]号。在C ++ / CLI项目中,哪个需要更新非托管版本资源。更改相应的.rc文件可以自动进行,也可以使用#define。
请注意2.0版中的.NET基本程序集的行为方式相同。他们的[AssemblyVersion]在3.0、3.5和3.5 SP1发行版中始终保持在2.0.0.0。其文件版本始于2.0.50727.42。在过去的5年中,多次增值,达到2.0.50727.4927,即得即取。
根据记录,您链接到的VS2010错误不是错误。只是从来没有成功过,失败是无声的。这是C ++构建系统中的一个缺陷,mt.exe在程序集强命名后嵌入清单。并在此过程中破坏强名称,因为这会更改文件哈希。 VS2010实际上是一种改进,它会警告它,而不是默默地让一个破烂的强者通过。您不必延迟签名,只需在构建后事件中使用-Ra签名即可。