最近、asp.netコアから活動室予約項目がasp.netコア3.0から2.2のアップデートは、それを記録し、レッスンは、ピットのアップグレード段を含むがこれらに限定されない学びました、
- TargetFramework(
netcoreapp2.2
更新する必要がありますnetcoreapp3.0
) - 依存
- ホスト/環境
- MVC
- ルーティング
- 濶歩
- Dockerfile
- EF(推奨されません更新)
TargetFramework
更新#
で元のプロジェクトnetcoreapp2.x
バージョンは、のように更新する必要がありnetcoreapp3.0
、更新後のパッケージがあれば、プロジェクトの一部が依存に基づいて元のパッケージnetstandard2.0 netstandard2.1
のように更新する必要があるかもしれないnetstandard2.1
(非必須依存プロジェクトを参照すること)
依存関係#
ときdotnetcoreバージョン2.xフォームnugetで提供された元のパッケージのほとんどは、あなたが(参照フレームワークでパッケージを参照する必要がもはやnuget多くのパッケージが公開されているdotnetcore 3.0パッケージから開始し、直接参照をnugetことはできませんFrameworkReference
)
たとえば、クラスライブラリプロジェクトでは<Project Sdk="Microsoft.NET.Sdk">
、そのような参照持つ<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.2" />
3.0には、例えば、参照フレームワークを使用する必要性、nugetパッケージdotnetcore対応する公開していません。
<FrameworkReference Include="Microsoft.AspNetCore.App" />
Webプロジェクト場合は<Project Sdk="Microsoft.NET.Sdk.Web">
、SDKは、直接ウェブtargetFrameworkに更新されnetcoreapp3.0
、その上に、あなたは上記のプロジェクトへの参照を追加する必要はありません<PackageReference Include="Microsoft.AspNetCore.App"/>
参照を直接削除することができ
ホスト&&環境#
オリジナルIHostingEnvironment
の代わりに、IWebHostEnvironment
元の注入IHostingEnvironment
の必要に応じて注入するために修飾されましたIWebHostEnvironment
オリジナルをProgram
使用してWebHostBuilder
代わりにHostBuilder
とのconfigure ` ConfigureWebHostDefaults
次のように`の変更:
MVCの#
サービス登録#
3.0 MVCのための年Controller
とRazorPages
同様にRazorViews
、それはWebAPIのプロジェクトだけを追加することができているならば、我々は、彼らが必要とするサービスのみを注入することができ、射出サービス仕上げController
対応方法を追加する必要にサービスを:
services.AddControllers(); // WebAPI
services.AddControllersWithViews(); // MVC
services.AddRazorPages(); // RazorPage
JSONの設定#
asp.netのMicrosoftの新しいJSONのデフォルトを使用してコア3.0、まだ推奨される使用Newtonsoft.Json
、成熟し、特殊なケースの処理の多くを持っているためには、次のように使用し、.NETファクトスタンダードでJSONのシリアライズとなっています:
-
参考nugetパッケージMicrosoft.AspNetCore.Mvc.NewtonsoftJson
-
使用するように設定
Newtonsoft.Json
services.AddControllersWithViews()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; // 设置时区为 UTC
});
Rounting #
asp.netコア3.0は、エンドポイントrountingをお勧めします
以下のような構成は以下のとおりです。
app.UseStaticFiles();
app.UseSwagger()
.UseSwaggerUI(c =>
{
// c.RoutePrefix = string.Empty; //
c.SwaggerEndpoint($"/swagger/{ApplicationHelper.ApplicationName}/swagger.json", "活动室预约系统 API");
c.DocumentTitle = "活动室预约系统 API"; }); app.UseRouting(); // 放在 UseStaticFiles 之后 app.UseCors(builder => builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()); app.UseRequestLog(); app.UsePerformanceLog(); app.UseAuthentication(); app.UseAuthorization(); // 放在 UseAuthentication 之后 app.UseEndpoints(endpoints => { endpoints.MapControllers(); // 属性路由 endpoints.MapControllerRoute("Notice", "/Notice/{path}.html", new { controller = "Home", action = "NoticeDetails" }); // 自定义路由 endpoints.MapControllerRoute(name: "areaRoute", "{area:exists}/{controller=Home}/{action=Index}"); // 区域路由 endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); // 默认路由 });
闊歩#
最新バージョン5.0.0-RC-Xに依存するアップデート闊歩(安定版を作っていない、あなたが見るためのプレビュー版を表示する必要があります)
services.AddSwaggerGen(options =>
{
options.SwaggerDoc(ApplicationHelper.ApplicationName, new Microsoft.OpenApi.Models.OpenApiInfo { Title = "活动室预约系统 API", Version = "1.0" });
options.IncludeXmlComments(System.IO.Path.Combine(AppContext.BaseDirectory, $"{typeof(Models.Notice).Assembly.GetName().Name}.xml")); options.IncludeXmlComments(System.IO.Path.Combine(AppContext.BaseDirectory, $"{typeof(API.NoticeController).Assembly.GetName().Name}.xml"), true); });
その他のリファレンス:
https://www.cnblogs.com/laozhang-is-phi/p/11520048.html#autoid-6-0-0
https://www.cnblogs.com/weihanli/p/ues-swagger -in-aspnetcore3_0.html
ドッカーの#
3.0に更新するためのベースイメージのニーズのDockerfile
例dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-alpine AS build-env
WORKDIR /src # Copy csproj and restore as distinct layers COPY ActivityReservation.Common/*.csproj ActivityReservation.Common/ COPY ActivityReservation.Models/*.csproj ActivityReservation.Models/ COPY ActivityReservation.DataAccess/*.csproj ActivityReservation.DataAccess/ COPY ActivityReservation.Business/*.csproj ActivityReservation.Business/ COPY ActivityReservation.Helper/*.csproj ActivityReservation.Helper/ COPY ActivityReservation.WechatAPI/*.csproj ActivityReservation.WechatAPI/ COPY ActivityReservation.AdminLogic/*.csproj ActivityReservation.AdminLogic/ COPY ActivityReservation.API/*.csproj ActivityReservation.API/ COPY ActivityReservation/ActivityReservation.csproj ActivityReservation/ # RUN dotnet restore ActivityReservation/ActivityReservation.csproj ## diff between netcore2.2 and netcore3.0 WORKDIR /src/ActivityReservation RUN dotnet restore # copy everything and build COPY . . RUN dotnet publish -c Release -o out ActivityReservation/ActivityReservation.csproj # build runtime image FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine LABEL Maintainer="WeihanLi" WORKDIR /app COPY --from=build-env /src/ActivityReservation/out . EXPOSE 80 ENTRYPOINT ["dotnet", "ActivityReservation.dll"]
ベースイメージが一般的に問題ではありませんし、dockerfileに便利がある場合ことに注意する必要が変更dotnet publish
とアイテムがディレクトリに存在しない公開、あなたが公開したいファイルを見つけることができません最終的には、現在この問題が発生することがあります。
DOTNETコア3.0 CLIは、あなたのプロジェクトファイルのディレクトリに公開されます2.xバージョンでは、現在のディレクトリにないアイテムを公開したい場合は、破壊の変化を持っていますが、バージョン3.0は、例えば、実行し、カレントディレクトリにリリースされる予定dotnet publish -c Release ./src/ActivityReservation.csproj -o out
のコマンドを:
2.xのバージョンがしますsrc
ディレクトリの生成out
フォルダを
バージョン3.0現在のディレクトリが生成されますout
、フォルダをout
フォルダ、src
同じレベルで
詳細な質問を参照することができますhttps://github.com/dotnet/cli/issues/12696
IF #
EFコア2.xでのasp.net 3.0の使用中のEFコア3.0と3.0のasp.netコア完全に独立し、缶コアプロジェクト
EFコア3.0は、あなたがより明確にどのような条件とデータベースの実装がローカルで実行されるどのような条件では知ることができます互換性に影響する変更、もはや暗黙のサポートクライアントの描画データを、持っていますが、実際の試験のダウンは、まだ多くの疑問があります、EFに基づいて、床には、スプライスクエリ式ツリーにしようとカプセル化しますが、最後の実行は問題があるでしょうが、簡略化されたクライアントの条件は、実際に任意のフィルタリング操作を、それ一時的に実行していないときEFコア3.0をお勧めします、そしてあなたは、このような展開など、更新後の他の問題は、ドッキングウィンドウの高山で、この問題が発生する可能性が経験することが、問題を見ないようにしてくださいhttps://github.com/aspnet/EntityFrameworkCore/issues/18025
このプロジェクトは現在、EF core2.1 + asp.net core3.0実行を使用しています
より多くの#
他の場所でも、変更したい場所を持っている必要があり、追加してください