3

VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)...

 8 months ago
source link: https://www.cnblogs.com/xiongzaiqiren/p/NetFramework462.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)

VS2015里面没有.NET Framework 4.6.2

VS2015默认安装的目标框架最高是.NET Framework 4.6.1,但是我的项目里面某些NuGet软件包更新需要依赖.NET Framework 4.6.2,项目就需要升级到目标框架.NET Framework 4.6.2
VS2015项目无法选择framework 4.6.2的解决办法:

第一步:系统环境安装.NET Framework 4.6.2

官网下载地址 Download .NET Framework 4.6.2
https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/net462
建议下载“脱机安装程序”,包括英文版安装所需的所有内容。下载安装程序后,无需 Internet 连接。
“开发人员工具包”:是否要生成应用? 软件开发人员使用开发人员包创建在 .NET Framework 上运行的应用程序(通常使用 Visual Studio)。
“运行应用 - 运行时 ”:是否要运行应用? 运行时包括运行使用 .NET Framework 生成的现有应用/程序所需的一切内容。

开发人员工具包,运行时安装包两个都需要!加上各自的“中文(简体)”语言包,总共是4个包:

  • ndp462-kb3151800-x86-x64-allos-enu.exe # 运行应用运行时(离线)安装包,安装顺序1

  • ndp462-kb3151800-x86-x64-allos-chs.exe # 运行应用运行时(离线)中文(简体)语言安装包,安装顺序2

  • ndp462-devpack-kb3151934-enu.exe # 开发人员工具包(离线)安装包,安装顺序3

  • ndp462-devpack-kb3151934-chs.exe # 开发人员工具包(离线)中文(简体)语言安装包,安装顺序4

安装和卸载 .NET Framework 受阻疑难解答
https://learn.microsoft.com/zh-cn/dotnet/framework/install/troubleshoot-blocked-installations-and-uninstallations?redirectedfrom=MSDN

如何:确定已安装的 .NET Framework 版本
https://learn.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

安装成功后,在“控制面板 -> 程序和功能”里面能看到“Microsoft .NET Framework 4.6.2 ***”相关的几个程序,说明系统环境上安装好了。
发布后的生产线上服务器可以不安装开发人员工具包,仅安装运行应用运行时包就行。

第二步:VS2015项目选择目标框架.NET Framework 4.6.2

系统已安装了.net framework 4.6.2,但在新建项目的时候没有此版本可选。
解决:framework安装包分为环境安装包和开发人员工具包两个版本,环境安装包装完只是可以运行该版本开发的程序,而要在VS里先择的话,需要下载安装开发人员工具包。
确认上一步的开发人员工具包安装成功后,关闭并重启VS2015或 VS Code工具。
重启后等待加载完,在项目名称右键“属性”,然后“应用程序 -> 目标框架”里面就能看见.NET Framework 4.6.2选项了。
如图:

840264-20230819234717263-249554375.png

如果是解决方案里多个项目分层互相引用的,应该从最底层的项目开始逐一往上一层项目调整。

第三步:更新NuGet软件包

项目的目标框架更新后,会有错误:一些 NuGet 程序包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装。
如图:

840264-20230819234658189-2111654370.png

“项目名称”展开里面“引用”右键“管理NuGet程序包”,点击“更新”,里面可以选择需要更新升级的软件包了。逐一看右边说明里面依赖的目标框架版本哦!
如图:

840264-20230819234829220-298389132.png

更新完了之后,,可以查看项目目录下的packages.config,可以看到里面各软件都变成了 targetFramework="net462"
然后,我们查看web项目底下的Web.config 里面:

 <system.web>
    <authentication mode="None"/>
    <compilation debug="true" targetFramework="4.6.2"/>
    <httpRuntime targetFramework="4.5.2"/>

手工修改成 <httpRuntime targetFramework="4.6.2"/>
最后在web项目上“重新生成”,发现自动更新了所有相关的软件包。
全部生成成功,去访问一下试试吧 _ 已经可以正常跑项目了,哈哈哈。


未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

【报错信息】
用户代码未处理 System.IO.FileLoadException
FileName=System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
FusionLog=""
HResult=-2146234304
Message=未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Source=System.Threading.Tasks.Extensions
StackTrace:
在 System.Threading.Tasks.ValueTask 1.get_Result()
在 MySql.Data.MySqlClient.MySqlConnection.BeginDbTransaction(IsolationLevel isolationLevel)
在 My.DAL.ChapterDAL.ChapterHotAddition(String BookId, String ChapterID, Int32 DegreeOfHot) 位置 D:\WorkSpace\WebContentCrawler\WebContentCrawler\DAL\ChapterDAL.cs:行号 255
在 My.BLL.ChapterBLL.ChapterHotAddition(String BookId, String ChapterID, Int32 DegreeOfHot) 位置 D:\WorkSpace\WebContentCrawler\WebContentCrawler\BLL\ChapterBLL.cs:行号 162
在 mobileWeb.Controllers.bookController.AddUserViewHistory(Int32 uid, String BookId, String BookTitle, String pagepath, String ChapterID, String ChapterTitle) 位置 D:\WorkSpace\WebContentCrawler\WebContentCrawler\mobileWeb\Controllers\bookController.cs:行号 236
在 lambda_method(Closure , ControllerBase , Object[] )
在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters)
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult)
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f()
InnerException:
FileName=System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
FusionLog==== 预绑定状态信息 ===
日志: DisplayName = System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
日志: Appbase = file:///D:/WorkSpace/WebContentCrawler/WebContentCrawler/mobileWeb/
日志: 初始 PrivatePath = D:\WorkSpace\WebContentCrawler\WebContentCrawler\mobileWeb\bin
调用程序集: System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51。

===
日志: 此绑定从 default 加载上下文开始。
日志: 正在使用应用程序配置文件: D:\WorkSpace\WebContentCrawler\WebContentCrawler\mobileWeb\web.config
日志: 使用主机配置文件: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config
日志: 使用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config 的计算机配置文件。
日志: 在应用程序配置文件中找到重定向: 4.0.4.1 已重定向到 5.0.0.0。
日志: 策略后引用: System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
日志: 相同的绑定已出现过,因 hr = 0x80131040 而失败。

HResult=-2146234304
Message=未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
InnerException:

【原因】
在运行OpenSolutionAsync时出错,catch得到的e的错误信息Message是未能加载文件或程序集System.IO.FileNotFoundException:“未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。”。

【解决办法】
请查看该博客的第三步:.NET项目|未能加载文件或程序集“xxx”,或它的某一个依赖项。系统找不到指定的文件的通解。
一般来说,报错提示信息缺什么版本就安装、更新到什么版本就好了。我这里缺少System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0于是更新如图:

840264-20230819234641392-1817877518.png

更新安装完成,重新生成项目,发现一切都 OK 了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK