Zdarzenia
19 lis, 23 - 21 lis, 23
Dołącz do sesji online na konferencji Microsoft Ignite, aby rozwinąć swoje umiejętności i pomóc w rozwiązywaniu dzisiejszych złożonych problemów.
Zarejestruj się terazTa przeglądarka nie jest już obsługiwana.
Przejdź na przeglądarkę Microsoft Edge, aby korzystać z najnowszych funkcji, aktualizacji zabezpieczeń i pomocy technicznej.
Autor: Scott Addie
W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 2.1 w celu ASP.NET Core 2.2.
Ostrzeżenie
Jeśli używasz programu Visual Studio 2017, zobacz dotnet/sdk issue #3124 , aby uzyskać informacje o wersjach zestawu .NET Core SDK, które nie działają z programem Visual Studio.
Projekty przeznaczone dla platformy .NET Core powinny używać programu TFM wersji nowszej lub równej .NET Core 2.2. W pliku projektu zaktualizuj <TargetFramework>
wewnętrzny tekst węzła za pomocą polecenia netcoreapp2.2
:
<TargetFramework>netcoreapp2.2</TargetFramework>
Projekty przeznaczone dla programu .NET Framework mogą nadal używać programu TFM wersji nowszej lub równej programowi .NET Framework 4.6.1:
<TargetFramework>net461</TargetFramework>
Aby wdrożyć model hostingu w procesie dla usług IIS, dodaj <AspNetCoreHostingModel>
właściwość z wartością InProcess
do <PropertyGroup>
elementu w pliku projektu:
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Model hostingu w procesie nie jest obsługiwany w przypadku aplikacji ASP.NET Core przeznaczonych dla platformy .NET Framework.
Aby uzyskać więcej informacji, zobacz Moduł ASP.NET Core Module (ANCM) dla usług IIS.
W przypadku projektów używających niestandardowego pliku web.config w katalogu głównym projektu w celu wygenerowania opublikowanego pliku web.config :
<handlers>
, który dodaje moduł ASP.NET Core (name="aspNetCore"
), zmień wartość atrybutu modules
z AspNetCoreModule
na AspNetCoreModuleV2
.<aspNetCore>
dodaj atrybut modelu hostingu (hostingModel="InProcess"
).Aby uzyskać więcej informacji i przykładowych plików web.config, zobacz ASP.NET Core Module (ANCM) dla usług IIS.
W przypadku określania wartości docelowej dla platformy .NET Core usuń atrybut odwołania Version
metapakiet w pliku projektu. Dołączenie atrybutu Version
powoduje następujące ostrzeżenie:
A PackageReference to 'Microsoft.AspNetCore.App' specified a Version of `2.2.0`. Specifying the version of this package is not recommended. For more information, see https://aka.ms/sdkimplicitrefs
Aby uzyskać więcej informacji, zobacz Microsoft.AspNetCore.App metapakiet dla ASP.NET Core.
Odwołanie do pakietu metadanego powinno wyglądać podobnie do następującego <PackageReference />
węzła:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
W przypadku określania Version
wartości docelowej programu .NET Framework zaktualizuj atrybut odwołania do każdego pakietu do wersji 2.2.0 lub nowszej. Poniżej przedstawiono odwołania do pakietów w typowym projekcie ASP.NET Core 2.2 przeznaczonym dla platformy .NET Framework:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
</ItemGroup>
Jeśli odwołuje się do elementu Microsoft.AspNetCore.Razor. Zaprojektuj pakiet, zaktualizuj jego Version
atrybut do wersji 2.2.0 lub nowszej. Niepowodzenie w tym celu powoduje następujący błąd:
Detected package downgrade: Microsoft.AspNetCore.Razor.Design from 2.2.0 to 2.1.2. Reference the package directly from the project to select a different version.
Jeśli rozwiązanie opiera się na global.json pliku przeznaczonym dla określonej wersji zestawu .NET Core SDK, zaktualizuj jego version
właściwość do wersji 2.2 zainstalowanej na maszynie:
{
"sdk": {
"version": "2.2.100"
}
}
W przypadku korzystania z programu Visual Studio Code zaktualizuj plik ustawień uruchamiania projektu (.vscode/launch.json
). Ścieżka program
powinna odwoływać się do nowego serwera TFM:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/test-app.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart",
"launchBrowser": {
"enabled": true,
"args": "${auto-detect-url}",
"windows": {
"command": "cmd.exe",
"args": "/C start ${auto-detect-url}"
},
"osx": {
"command": "open"
},
"linux": {
"command": "xdg-open"
}
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
Jeśli aplikacja wywołuje wywołanie metody CreateDefaultBuilder
CreateWebHostBuilder Program
klasy , wywołaj metodę ConfigureKestrel
, aby skonfigurować Kestrel serwer zamiast UseKestrel
w celu uniknięcia konfliktów z modelem hostingu w procesie usług IIS:UseKestrel
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
// Set properties and call methods on options
});
Jeśli aplikacja nie wywołuje CreateDefaultBuilder
i kompiluje hosta ręcznie w Program
klasie, przed wywołaniem metody ConfigureKestrel
wywołaj metodę UseKestrel :
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseKestrel()
.UseIISIntegration()
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
// Set properties and call methods on options
})
.Build();
host.Run();
}
Aby uzyskać więcej informacji, zobacz Kestrel serwer internetowy w programie ASP.NET Core.
Zaktualizuj wersję zgodności w pliku Startup.ConfigureServices
na :Version_2_2
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
W programie ASP.NET Core 2.2 oprogramowanie pośredniczące CORS odpowiada za pomocą źródła symboli wieloznacznych (*
), jeśli zasady zezwalają na dowolne źródło i zezwalają na poświadczenia. Poświadczenia nie są obsługiwane, gdy określono źródło symboli wieloznacznych (*
), a przeglądarki nie zezwalają na żądanie CORS. Aby uzyskać więcej informacji, w tym opcje rozwiązywania problemu na kliencie, zobacz dokumentację internetową usługi MDN.
Aby rozwiązać ten problem na serwerze, wykonaj jedną z następujących czynności:
builder.WithOrigins("https://api.example1.com", "https://example2.com")
zamiast polecenia AllowAnyOrigin.W poniższej tabeli przedstawiono zmiany tagu obrazu platformy Docker:
2.1 | 2,2 |
---|---|
microsoft/dotnet:2.1-aspnetcore-runtime |
mcr.microsoft.com/dotnet/core/aspnet:2.2 |
microsoft/dotnet:2.1-sdk |
mcr.microsoft.com/dotnet/core/sdk:2.2 |
Zmień wiersze FROM
w pliku Dockerfile , aby używać nowych tagów obrazów w poprzedniej kolumnie 2.2 tabeli.
Autokompilowanie w środowisku żądania przeglądarki programu Visual Studio nie działa z modelem hostingu procesów usług IIS. Należy ręcznie skompilować projekt podczas korzystania z hostingu w procesie. Ulepszenia tego środowiska są planowane w przyszłej wersji programu Visual Studio.
Zalecany kod konfiguracji rejestrowania nie zmienił się z wersji 2.1 na 2.2, ale niektóre wzorce kodowania 1.x, które nadal działały w wersji 2.1, nie działają już w wersji 2.2.
Jeśli aplikacja rejestruje inicjowanie dostawcy, filtrowanie i ładowanie konfiguracji w Startup
klasie, przenieś ten kod na :Program.Main
Inicjowanie dostawcy:
Przykład 1.x:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
}
2.2 przykład:
public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
// ...
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
})
// ...
}
Filtrowanie:
Przykład 1.x:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Information);
// or
loggerFactory.AddConsole((category, level) =>
category == "A" || level == LogLevel.Critical);
}
2.2 przykład:
public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
// ...
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole()
.AddFilter<ConsoleLoggerProvider>
(category: null, level: LogLevel.Information)
// or
.AddFilter<ConsoleLoggerProvider>
((category, level) => category == "A" ||
level == LogLevel.Critical)
);
})
// ...
}
Ładowanie konfiguracji:
Przykład 1.x:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration);
}
2.2 przykład:
public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
// ...
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
})
// ...
}
Aby uzyskać więcej informacji, zobacz Rejestrowanie na platformie .NET Core i ASP.NET Core
Jeśli moduł ASP.NET Core Module (ANCM) nie był wybranym składnikiem, gdy program Visual Studio został zainstalowany lub czy wcześniejsza wersja narzędzia ANCM została zainstalowana w systemie, pobierz najnowszy Instalator pakietu hostingowego platformy .NET Core (pobieranie bezpośrednie) i uruchom instalatora. Aby uzyskać więcej informacji, zobacz Hosting Bundle (Pakiet hostingu).
Opinia o produkcie ASP.NET Core
ASP.NET Core to projekt typu open source. Wybierz link, aby przekazać opinię:
Zdarzenia
19 lis, 23 - 21 lis, 23
Dołącz do sesji online na konferencji Microsoft Ignite, aby rozwinąć swoje umiejętności i pomóc w rozwiązywaniu dzisiejszych złożonych problemów.
Zarejestruj się teraz