.net8.0正式版 升級 拿以前的項目測試aot編譯踩坑筆記 又棄坑

之前測試失敗,應該是雖然運行時是8.0但是平臺沒有指定8.0導致,
環(huán)境檢查

C:\src\netcorapibase>dotnet --info
.NET SDK:
 Version:           8.0.100
 Commit:            57efcf1350
 Workload version:  8.0.100-manifests.3b83835e

運行時環(huán)境:
 OS Name:     Windows
 OS Version:  10.0.19045
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\8.0.100\

已安裝 .NET 工作負載:
 Workload version: 8.0.100-manifests.3b83835e
沒有要顯示的已安裝工作負載。

Host:
  Version:      8.0.0
  Architecture: x64
  Commit:       5535e31a71

.NET SDKs installed:
  5.0.405 [C:\Program Files\dotnet\sdk]
  7.0.104 [C:\Program Files\dotnet\sdk]
  7.0.202 [C:\Program Files\dotnet\sdk]
  8.0.100 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 3.1.22 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.22 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 7.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.22 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.14 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 6.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 7.0.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

C:\src\netcorapibase>

項目指定環(huán)境,<TargetFramework>net8.0</TargetFramework>

    <PropertyGroup>
        <PublishAot>true</PublishAot>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <Platforms>AnyCPU;x64</Platforms>
        <StripSymbols>true</StripSymbols>
        <UserSecretsId>37c2da8e-4c70-4b1a-b525-dc02325e9e4c</UserSecretsId>
        <OutputType>Exe</OutputType>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
        <Configurations>xxx</Configurations>
    </PropertyGroup>

直接不aot,直接調(diào)試模式運行

 Reflection-based serialization has been disabled for this application. Either use the source generator APIs or explicitly configure the 'JsonSerializerOptions.TypeInfoResolver' property.

解決辦法
msbuild配置加上


<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>

具體參考微軟博客提供的信息如下:
https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-8/

image.png

具體資料鏈接
也就是說默認就禁用了反射默認值, 把它開啟就可以解決。

我aot編譯比較喜歡用的方式

dotnet publish 你的項目.csproj -r win-x64 -c CHANNEL

出現(xiàn)

Swashbuckle.AspNetCore.Filters.AddResponseHeadersFilter' could not be located
 for type 'Swashbuckle.AspNetCore.Filters.AddResponseHeadersFilter' could not be located. Ensure the type is concrete and all parameters of a public constructor are either registered as services or passed as arguments. Also ensure no extraneous arguments are provided.
         at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.FindApplicableConstructor(Type, Type[], ConstructorInfo&, Nullable`1[]&) + 0xa1
         at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance(IServiceProvider, Type, Object[]) + 0x447

https://github.com/dotnet/aspnetcore/issues/53125
這是我的提問,經(jīng)過大佬的回答,我發(fā)現(xiàn)不是我想的那么完美

我visual studio新建項目 發(fā)現(xiàn)多了個native aot

D1WR8C77LD1Z@CME`{RT4U6.png

和傳統(tǒng)的,是做了一些改變,
dotnet publish直接搞定

也就是說要完美兼容,他的demo就是完美的,沒有controller,也就是說controller就是mvc的那套,所以不支持的


image.png

他的demo的一些地方就是aot的源生成

image.png

而slimbuilder進行了特殊處理,更兼容一些。
xxx

參考
https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/native-aot?view=aspnetcore-8.0#aspnet-core-and-native-aot-compatibility

image.png

所以正如我那提問 然后大佬說的,就算碰巧支持,那也是不分支持

xxx

不過呢,進行aot后變成單文件,普通人是無法進行逆向了,我認為目的已經(jīng)達到了
另外沒有controller,就要自行研究 怎么封裝auth授權(quán)等東西了。
jwt目前是有了,但是沒有以前那套還是差了點東西,先暫時觀望吧

還有 0% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
支付 ¥1.00 繼續(xù)閱讀

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容