前言
折腾了一上午,还是GOOGLE解决了,百度搜出来的都什么玩意?
本以为就是个简单的依赖包安装问题,没太在意standard是个什么东西。
由于之前基本都是用framework,客户机部署的时候缺库就上framework的runtime包,
但是第一次看到这个问题,缺standard?
未能加载文件或程序集“netstandard, Version=2.0.0.0, Culture=neutral
失败是成功的妈妈
先介绍妈妈吧,把这问题搜了之后,出来的一堆方案,统统失效,失败方案如下:
1、下载安装Net Core 2.0 SDK?
抱歉,微软官网下不到安装器,SDK的只有不知道什么zip,估计需要自行编译,没有搞过,放弃;runtime包的下载地址也没有。。那么高版本的装一下呢?装了2.0.9的runtime,无法部署成功。
2、下载standard2.0的运行时安装包吧?
百度不出别的方案了,那么就找个standard2.0的runtime总有的吧;找了一圈,下了一堆standard-2.0.0.zip,有的还是preview。。github上有2.0.0正式版的。但是连接不稳定,所以没成功。
3、基于nuget部署吧?
这个展开的工作就很多了,大概试了下这个命令
nuget install NETStandard.Library -Version 2.0.0
然后在nuget同目录下会得到2.0.0的一个目录,里面有好多dll,激动。
但是dll丢到应用程序的目录下后,出现了新的错误提示
不应出于执行的目的加载引用程序集。只能在仅限反射的加载程序上下文中加载引用程序集。
4、最坑爹的微软:
也不知道从哪儿找到个微软官网的文档连接的,还挺全的,.NET全家桶都在。
看下这段(摘自https://docs.microsoft.com/en-us/dotnet/standard/net-standard):
.NET implementation support
The following table lists the minimum platform versions that support each .NET Standard version. That means that later versions of a listed platform also support the corresponding .NET Standard version. For example, .NET Core 2.2 supports .NET Standard 2.0 and earlier.
| .NET Standard |
1.0 |
1.1 |
1.2 |
1.3 |
1.4 |
1.5 |
1.6 |
2.0 |
|---|
| .NET Core |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
2.0 |
| .NET Framework 1 |
4.5 |
4.5 |
4.5.1 |
4.6 |
4.6.1 |
4.6.1 2 |
4.6.1 2 |
4.6.1 2 |
| Mono |
4.6 |
4.6 |
4.6 |
4.6 |
4.6 |
4.6 |
4.6 |
5.4 |
| Xamarin.iOS |
10.0 |
10.0 |
10.0 |
10.0 |
10.0 |
10.0 |
10.0 |
10.14 |
| Xamarin.Mac |
3.0 |
3.0 |
3.0 |
3.0 |
3.0 |
3.0 |
3.0 |
3.8 |
| Xamarin.Android |
7.0 |
7.0 |
7.0 |
7.0 |
7.0 |
7.0 |
7.0 |
8.0 |
| Universal Windows Platform |
10.0 |
10.0 |
10.0 |
10.0 |
10.0 |
10.0.16299 |
10.0.16299 |
10.0.16299 |
| Unity |
2018.1 |
2018.1 |
2018.1 |
2018.1 |
2018.1 |
2018.1 |
2018.1 |
2018.1 |
看到没,大概意思是Framework 461 支持standard2.0,但是客户机是有461版本的,那么就修复安装吧,因为担心framework没有向下兼容std2.0,所以还是使用了461。但是最后还是不能解决问题。也就是说微软文档有问题,461很可能不能支持std2.0。
这个时候,我想起了谷歌(抱歉,我来晚了),关键词(未能加载文件或程序集 netstandard)第一条就是:
https://stackoverrun.com/cn/q/12364158,里面有朋友提到
NETStandard 2.0.0-preview1 in not compatibility with net461 and net47
那么直接装个4.7.1的framework试下?结果居然成功了。。。
另外,这个链接有提到461最高支持std1.4,从经历看可信度要比官网高一点点:
https://www.cnblogs.com/Leo_wl/p/5525827.html
总结
standard是一种标准,不是实现,core和framework才是其“实例化”的载体。
参考资料
https://github.com/dotnet/standard
https://blog.csdn.net/sD7O95O/article/details/78126417
https://www.nuget.org/packages/NETStandard.Library/2.0.0
https://blog.csdn.net/u011127019/article/details/77196331
https://devblogs.microsoft.com/dotnet/introducing-net-standard/
https://www.cnblogs.com/zjoch/p/6696986.html |