内容简介:今天遇到一个非常风骚的问题。我们老老实实的编译asp.net mvc项目,只是从nuget引入了阿里的两个sdk包,没有改任何配置的前提下,生成项目会报如下警告:作为一个非专业的程序员,对warning还做不到视而不见,于是着手解决这个问题。
今天遇到一个非常风骚的问题。
我们老老实实的编译asp.net mvc项目,只是从nuget引入了阿里的两个sdk包,没有改任何配置的前提下,生成项目会报如下警告:
6>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2110,5): warning MSB3243: 无法解决“System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”与“System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”之间的冲突。正在随意选择“System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。 6> 请考虑使用 app.config 将程序集“System.Net.Http, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”从版本“4.0.0.0”[C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.1\System.Net.Http.dll]重新映射到版本“4.2.0.0”[C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net471\lib\System.Net.Http.dll],以解决冲突并消除警告。
作为一个非专业的程序员,对warning还做不到视而不见,于是着手解决这个问题。
然后随手必应一下,随手贴上了一段
<dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" /> </dependentAssembly>
小手一敲,依旧警告。
难道文档是错的?但是看其他人的文章,都说这样可以解决,难道我用了个假的.net framework?
经过一顿操作,输出改成详细模式,终于找到了一点点蛛丝马迹:这个4.2.0.0版本的dll存在一个叫Microsoft.NET.Build.Extensions的文件夹,而编译的时候仿佛引入了Microsoft.NET.Build.Extensions文件夹里的一个targets文件。
3>来自项目“xxx”的文件“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\Microsoft.NET.Build.Extensions.NETFramework.targets”中的目标“ImplicitlyExpandNETStandardFacades”(目标“ResolveAssemblyReferences”依赖于它): 3>正在使用程序集“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\\tools\net46\Microsoft.NET.Build.Extensions.Tasks.dll”中的“GetDependsOnNETStandard”任务。 3>任务“GetDependsOnNETStandard” 3>已完成执行任务“GetDependsOnNETStandard”的操作。
看起来问题解决了一部分,项目自动引入了一个.net standard的类库,导致冲突。
但是我也没引入这东西啊,csproj里也没配置ImplicitlyExpandNETStandardFacades相关的东西,所以打开targets看下里面是什么东西:
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
<!-- Add NETStandard references if targetframeworkversion supports netstandard2.0 (net461 or later) -->
<ImplicitlyExpandNETStandardFacades Condition="'$(ImplicitlyExpandNETStandardFacades)' == '' AND '$(_TargetFrameworkVersionWithoutV)' >= '4.6.1'">true</ImplicitlyExpandNETStandardFacades>
</PropertyGroup>
<!-- ... -->
<!--
.NET 4.7.1 has support for .NET Standard 2.0 built-in, so most of the facades aren't necessary. However, the assembly versions of a few set of assemblies
do not yet match the ones shipped in the support package for .NET Standard 2.0 on .NET 4.7 and below. This means that .NET 4.7 or lower libraries might have
references to higher versions of these assemblies than are available in-box in .NET 4.7, leading to assembly loading errors. So if there is a dependency on
netstandard.dll, we include DLLs for .NET 4.7.1 from the support package to avoid these errors.
-->
<ItemGroup Condition="'$(_TargetFrameworkVersionWithoutV)' == '4.7.1'">
<_NETStandardLibraryNETFrameworkLib Include="$(MSBuildThisFileDirectory)\net471\lib\*.dll" Condition="'$(DependsOnNETStandard)' == 'true'"/>
</ItemGroup>
你妈的,神经病啊。在项目文件csproj的第一个PropertyGroup中添加
<ImplicitlyExpandNETStandardFacades>false</ImplicitlyExpandNETStandardFacades>
编译通过,运行正常,以后出问题再说。
这个问题应该只会出现在现在这个Framework到core的过渡期,先凑合着来吧。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux从入门到精通
刘忆智、等 / 清华大学出版社 / 2010-1-1 / 59.00元
linux是目前增长最迅速的操作系统。本书由浅入深、循序渐进地向读者介绍linux的基本使用和系统管理。全书内容包括linux概述、linux安装、linux基本配置、桌面环境基本操作、shell基本命令、文件和目录管理、软件包管理、磁盘管理、用户与用户组管理、进程管理、网络配置、浏览网页、收发邮件、文件传输和共享、远程登录、多媒体应用、图像浏览和处理、打印机配置、办公软件的使用、linux编程工......一起来看看 《Linux从入门到精通》 这本书的介绍吧!