錯(cuò)誤詳情:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. 系統(tǒng)找不到指定的文件。
File name: 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
at System.Reflection.RuntimeAssembly.GetExportedTypes()
問題產(chǎn)生的原因:
- .NET6 和 .NET7 同時(shí)存在杭棵,并編譯到不同的文件夾中去丽猬。
- 由于 .NET7 的程序驻啤, 在WIN2008 R2 上會(huì)占用雙倍內(nèi)存(不信自己試), 所以在 WIN2008 R2 上部署的是 .NET 6 的程序涂乌。
- .NET7 的程序部署在高版本的服務(wù)器上, 沒有這個(gè)問題。
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
舵匾。。谁不。
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net6.0|AnyCPU'">
<OutputPath>..\XXX\bin\Release\net6.0\</OutputPath>
<!--移除輸出目錄中的 netXXX.0 子文件夾, 直接輸出到 debug, release 目錄中-->
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<!--將引用的相關(guān)DLL一并輸出纽匙, 否則, 不會(huì)輸出-->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
拍谐。烛缔。。
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net7.0|AnyCPU'">
<OutputPath>..\XXX\bin\Release\net7.0\</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
解決方法:--roll-forward LatestMajor
參考:.NET選擇要使用的版本 - .NET | Microsoft Learn
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments="--roll-forward LatestMajor XXX.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
注意 --roll-forward LatestMajor xxx.dll
的順序轩拨,寫反了践瓷, 是不起作用的。
global.json
至少對(duì) WIN 2008 R2 的 IIS 無用亡蓉, 其它的沒有測(cè)試晕翠。