在.csproj
文件中声明了
<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>
但是用dotnet pack
命令发布时一直报以下的错:
error MSB3644: 未找到框架“.NETFramework,Version=v4.7.1”的引用程序集。若要解决此问题,请安装此框架版本的 SDK 或 Tar
geting Pack,或将应用程序的目标重新指向已装有 SDK 或 Targeting Pack 的框架版本。请注意,将从全局程序集缓存(GAC)解析程序集,并将使用这些程序集替换引用程序集。因此,程序集的目标可能未正确指向您所预期的框
架
然后安装 net471的框架也安装不了,请问如何解决?
遇到的问题是:项目依赖的是.net standard 2.0 ,但是用户用的是 net461, netstand 的方法net461没有,导致程序报错!
在.csproj
文件中编写如下
<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>
这时如果你编译,或许会遇到System.Web 冲突的问题,或者是System.Web.HttpUlitity 在上下文中不存在。然后加入下面这句
<ItemGroup Condition=" '$(TargetFramework)' == 'net471' ">
<Reference Include="System.Web" />
</ItemGroup>
就可以完美build 了,就解决了该问题了。
还有.net framework 4.7.1 框架装不了的原因也找到了,是因为我用错安装包了,没有下载 developer 的版本,正确的地址是
https://www.microsoft.com/en-us/download/details.aspx?id=56119 然而我用了这个 https://www.microsoft.com/en-us/download/details.aspx?id=56116
.net framework 4.7.1 本来就支持 .net standard 2.0 ,直接发布 netstandard2.0
就可以在 net471
项目中使用,详见 实际体验 .NET Standard 2.0 的魅力
.netframework471 是支持的,主要是有个问题是,用户在用的框架版本是 .net framwork 461 的,然后使用我们发的包之后,发现运行报错。
问题出现的原因主要是:我们在项目中用了 System.Runtime.InteropServices.RuntimeInformation.OSDescription
来获取OS版本,但这个支持最低运行的 framework 为 471, 我就是想用户下载这个nuget包后,提示他最低支持的框架为 471,然而在 csproj 中找不到设置的办法。