asp.Netcore 1.1プロジェクトはaspにアップグレードされた.Netcore 2.0 preview 2と正式版

22132 ワード

この2,3日aspをNetcore 1.1のプロジェクトはaspに移行した.Netcore 2.0 preview 2、このエッセイに記録しておきます. 
プロジェクトにglobalがある場合.jsonファイルは、削除または変更する必要があります.Net 2.0 preview 2のsdkバージョン番号.
クラスライブラリプロジェクトの場合.csproj、TagetFrameworkをnetstandard 2に変更する必要があります.0、たとえば
<PropertyGroup>
  <TargetFramework>netstandard1.6TargetFramework>
  <AssemblyName>CNBlogs.Identity.ServiceAgentAssemblyName>
  <PackageId>CNBlogs.Identity.ServiceAgentPackageId>
  <NetStandardImplicitPackageVersion>1.6.1NetStandardImplicitPackageVersion>
  <GenerateAssemblyConfigurationAttribute>falseGenerateAssemblyConfigurationAttribute>
  <GenerateAssemblyCompanyAttribute>falseGenerateAssemblyCompanyAttribute>
  <GenerateAssemblyProductAttribute>falseGenerateAssemblyProductAttribute>
PropertyGroup>

に改心
<PropertyGroup>
  <TargetFramework>netstandard2.0TargetFramework>
PropertyGroup>

ユニットテスト項目の場合、TargetFrameworkはnetcoreapp 2に変更する必要がある.0、たとえば
<PropertyGroup>
  <TargetFramework>netcoreapp1.1TargetFramework>
  <AssemblyName>CNBlogs.Identity.UnitTestsAssemblyName>
  <PackageId>CNBlogs.Identity.UnitTestsPackageId>
  <GenerateRuntimeConfigurationFiles>trueGenerateRuntimeConfigurationFiles>
  <RuntimeFrameworkVersion>1.1.1RuntimeFrameworkVersion>
  <GenerateAssemblyConfigurationAttribute>falseGenerateAssemblyConfigurationAttribute>
  <GenerateAssemblyCompanyAttribute>falseGenerateAssemblyCompanyAttribute>
  <GenerateAssemblyProductAttribute>falseGenerateAssemblyProductAttribute>
PropertyGroup>

に改心
<PropertyGroup>
  <TargetFramework>netcoreapp2.0TargetFramework>
PropertyGroup>

Webプロジェクトには、動くべき場所がたくさんあります.TargetFrameworkをnetcoreapp 2に変更する以外は.0、たとえば
<PropertyGroup>
  <TargetFramework>netcoreapp1.1TargetFramework>
  <PreserveCompilationContext>truePreserveCompilationContext>
  <AssemblyName>CNBlogs.Identity.WebAssemblyName>
  <OutputType>ExeOutputType>
  <PackageId>CNBlogs.Identity.WebPackageId>
  <RuntimeIdentifiers>win10-x64;win8-x64;osx.10.12-x64;ubuntu.14.04-x64RuntimeIdentifiers>
  <PackageTargetFallback>$(PackageTargetFallback);dnxcore50;portable-net45+win10PackageTargetFallback>
  <RuntimeFrameworkVersion>1.1.1RuntimeFrameworkVersion>
PropertyGroup>

に改心
<PropertyGroup>
  <TargetFramework>netcoreapp2.0TargetFramework>
PropertyGroup>

必要なものは次のとおりです.
1)すべての対Microsoftを除去する.AspNetCoreの参照
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.Extensions" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.Redis" Version="0.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Session" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />

Microsoftを追加AspNetCoreの参照
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview2-final" />

2)Authentication関連コードの修正
  • CookieAuthenticationOptionsのネーミングスペースをMicrosoftに変更しました.AspNetCore.Authentication.Cookies
  • HttpContext.Authentication.SignInAsync()をHttpContextに変更する.SignInAsync()は、NuGetパッケージMicrosoftをインストールする必要があります.AspNetCore.Authentication.Abstraactions、名前空間Microsoftを参照.AspNetCore.Authentication . 
  • cookieAuthOptions.Value.AuthenticationSchemeをCookieAuthenticationDefaultsに変更しました.AuthenticationScheme

  • 3)BundlerMinifierに対する修正
    asp.Netcore 2.0 preview 2のdockerコンテナのbuild項目dotnet bundleを実行中に次のエラーが発生しました
    It was not possible to find any compatible framework version
    The specified framework 'Microsoft.NETCore.App', version '1.1.0' was not found.
    - Check application dependencies and target a framework version installed at:
        /
    - Alternatively, install the framework version '1.1.0'.

    これはnugetパッケージBundlerMinifierのためです.Coreはサポートしていません.net core 2.0 .githubでBundlerMinifierのソースコードにサインし(.net core 2.0のサポートが追加されました)、自分でパッケージします. 
    アップグレード時にPackageReferenceのBundlerMinifierをアップグレードするだけではありません.Core、DotNetCliToolReferenceのBundlerMinifierもアップグレードします.Core .
    4)DataProtectionに対する修正
    Microsoft.AspNetCore.DataProtection.RedisのPersistKeysToRedis()メソッドは機能しません.一時的な解決方法を変更する必要があります.
    services.Configure(o =>
    {
        o.XmlRepository = new RedisXmlRepository(() => redisConn.GetDatabase(), "DataProtection-Keys-Cnblogs");
    });

    詳しくはPersistKeysToRedis not working in.NET Core 2.0 Preview 2 with Redis 0.1.2
    5)Startupの修正
  • 構造関数の次のコードを除去
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    
    builder.AddEnvironmentVariables();
    Configuration = builder.Build();

  • Configureメソッドの次のコードを除去
    loggerFactory.AddSerilog();
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));

  • IConfigurationRootをIConfigurationに変更
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    
    public IConfiguration Configuration { get; set; }


  • 6)プログラムの修正
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }
    
        public static IWebHost BuildWebHost(string[] args)
        {
            return WebHost.CreateDefaultBuilder(args)
                .ConfigureLogging((context, logging) =>
                {
                    logging.AddSerilog();
                })
                .UseStartup()
                .Build();
        }
    }

    Webプロジェクトのアップグレードが完了したら、すべてのNuGetパッケージをアップグレードし、すべてのAssemblyInfoを削除します.csファイル、アップグレード全体が完了しました.
    【更新】
    2017年8月15日、マイクロソフトが発表した.NET Core 2.0公式版、詳しくは.NET Core 2.0公式発表情報まとめ.
    アップグレードの注意:
    1)上記PersistKeysToRedis()に対する一時的な解決方法は不要
    2)Authenticationに対する修正
    から
    services.AddCookieAuthentication(options =>
    {
        options.CookieHttpOnly = true;
        options.CookieName = "xxx";
        options.CookieDomain = "xxx";
        options.LoginPath = "/account/signin";
        options.LogoutPath = "/account/signout";
    });

    に改心
    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    })
    .AddCookie(options =>
    {
        options.Cookie.HttpOnly = true;
        options.Cookie.Name = "xxx";
        options.Cookie.Domain = "xxx";
        options.LoginPath = "/account/signin";
        options.LogoutPath = "/account/signout";
    });

    3)ビュー.cshtmlの変数名はpageを使用できません.