亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么將站點從ASP.NET 5 RC1升級至ASP.NET Core 1.0

發布時間:2021-12-06 13:35:21 來源:億速云 閱讀:125 作者:iii 欄目:大數據

本篇內容介紹了“怎么將站點從ASP.NET 5 RC1升級至ASP.NET Core 1.0”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

從 ASP.NET 5 到 ASP.NET Core 最大的變化,除了改名之外,就是用 dotnet cli(命令名是dotnet)取代了dnx。所以運行 ASP.NET Core 程序,首先要安裝 dotnet cli,我們是在 Ubuntu 服務器上用 apt-get install dotnet-nightly 命令安裝的。

運行 ASP.NET 5 程序的命令是 dnx restore + dnx web,運行 ASP.NET Core 程序的命令則變為 dotnet restore + dotnet run。dotnet 運行 ASP.NET 程序 與 dnx 有一個很大的不同,除了 project.json 與 Startup.cs 職位,還需要一個 Program.cs 。

用 dnx 運行 ASP.NET 5 程序,需要在 project.json 中配置相應的 command ,比如:

"commands":{
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:8001"
}

而在 ASP.NET Core 中,不再需要這個 command ,而是交由 Program.cs 負責,比如我們這個示例項目中所用的 Program.cs 代碼如下:

using System.IO;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Builder;namespace CNBlogs.AboutUs.Web
{    public class Program
    {        public static void Main(string[] args)
        {            var host = new WebHostBuilder()
                        .UseServer("Microsoft.AspNetCore.Server.Kestrel")
                        .UseUrls("http://*:8001")
                        .UseApplicationBasePath(Directory.GetCurrentDirectory())
                        .UseDefaultConfiguration(args)
                        .UseIISPlatformHandlerUrl()
                        .UseStartup<Startup>()
                        .Build();
            host.Run();
        }
    }
}

從上面的代碼可以看出,ASP.NET Core 應用的啟動工作是由 WebHostBuilder(源碼)起頭的,但它不是主角,只是助手,準備一些啟動參數,最終把啟動工作交給了真正的主角 —— WebHost,如果你對 WebHost 怎么干活的感興趣,可以看它的 源碼 。

弄好 Program.cs 之后,接下來就是體力活 —— 改名。

  • EntityFrameworkCore.MicrosoftSqlServer 改為 Microsoft.EntityFrameworkCore.SqlServer

  • Microsoft.AspNet.Builder 改為 Microsoft.AspNetCore.Builder

  • Microsoft.Data.Entity 改為 Microsoft.EntityFrameworkCore

  • Microsoft.AspNet.Mvc 改為 Microsoft.AspNetCore.Mvc

  • Microsoft.AspNet.Html.Abstractions 改為 Microsoft.AspNetCore.Html

  • 移除 Microsoft.Dnx.Runtime 命名空間

  • 等等

完成“改名”體力活之后,接下來的工作最費周折最累人 —— 配置 project.json , 而且現在的 project.json 不支持注釋,調測配置變得更麻煩。

首先要在 project.json 中添加如下 emitEntryPoint 的配置,dnx 時期不加是可以的,現在可不行。

"compilationOptions": {
        "emitEntryPoint": true
}

遇到的第一問題是 dotnet restore 時出現 not compatible with DNXCore,Version=v5.0 錯誤。。。后來通過在 project.json 中添加如下的配置解決了,但至今未能弄明白為什么加上看似這個不相關的配置能解決問題(或者只是表面地解決)。

"tools": {
      "dotnet-publish-iis": "1.0.0-*"
}

遇到的第二個問題是 The dependency Ix-Async 1.2.5 does not support framework DNXCore,Version=v5.0 。這個問題與 Entity Framework 有關,只要在 project.json 的 dependencies 中去掉 "Microsoft.EntityFrameworkCore.SqlServer",問題就消失。后來參考 Entity Framework 的源代碼,在 project.json 中添加如下的配置才解決問題:

"netstandard1.3": {
      "imports": [
        "dotnet5.4",
        "portable-net452+win81"
      ]
}

接下來遇到的問題是 ASP.NET Core MVC 路由匹配問題 ,用 dotnet run 將站點運行起來后,訪問任何URL都出現404錯誤。這是一個讓人無從下手的問題,因為從 Startup.cs 中的代碼看,MVC的配置無任何問題。后來還是懷疑到可能是 project.json 的問題,于是與 dotnet-cli 的示例項目 cli-samples 中的 project.json 進行對比,試了試添加如下的配置,問題竟然奇跡般地解決了(這個配置當時沒有去進一步研究)。

{
    "compilationOptions": {
        "preserveCompilationContext": true
    }
}

最后一個問題最讓人無語,問題是 訪問ASP.NET Core MVC站點出錯:Could not load file or assembly 'Microsoft.Win32.Registry' 。不僅我們的項目有這個問題,而且 cli-samples 中的 HelloMvc 項目也有這個問題。問題發生在 Microsoft.AspNetCore.DataProtection 中,而且 DataProtectionServices.cs 中的確引用了 Microsoft.Win32.Registry,但是我們是在 Linux 上運行的,難道 Microsoft.AspNetCore.DataProtection 目前還不支持跨平臺?

整個升級進程就在這里卡住了,當我們正準備暫時放棄升級至 ASP.NET Core 1.0 的時候,昨天發現 cli-samples 中的 prject.json 更新了,然后試著運行了一下 HelloMvc 項目,問題竟然神奇地解決了。

原來在 dependecies 中刪除了 NETStandard.Library ,在 frameworks 中添加了 netstandardapp1.3 的配置。于是,照著這個修改了我們項目中的 project.json ,問題立馬解決,我們的.NET跨平臺之旅的示例站點 about.cnblogs.com 也就成功運行了起來,升級總算成功完成了。

分享一下這個示例項目中的三個文件:

project.json:

{
    "compilationOptions": {
        "preserveCompilationContext": true,
        "emitEntryPoint": true
    },
    "dependencies" : {
        "Microsoft.Extensions.Logging.Console": "1.0.0-*",
        "Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-*",
        "Microsoft.AspNetCore.HttpOverrides": "1.0.0-*",
        "Microsoft.AspNetCore.Mvc": "1.0.0-*",
        "Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
        "Microsoft.AspNetCore.Diagnostics": "1.0.0-*",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*",
        "System.Runtime.Serialization.Primitives": "4.1.0-*",
        "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-*"
    },
    "frameworks": {
      "netstandardapp1.3": {
        "dependencies": {
          "NETStandard.Library": "1.0.0-*"
        },
        "imports": [
          "dnxcore50",
          "portable-net45+win8"
        ]
      }
    },
    "tools": {
      "dotnet-publish-iis": "1.0.0-*"
    }
}

Startup.cs:

namespace CNBlogs.AboutUs.Web
{    public class Startup
    {        public Startup(IApplicationEnvironment appEnv)
        {
            IConfigurationBuilder builder = new ConfigurationBuilder()
                .SetBasePath(appEnv.ApplicationBasePath)
                .AddJsonFile("config.json", false);
            Configuration = builder.Build();
        }        public IConfiguration Configuration { get; set; }        public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(LogLevel.Debug);
            app.UseDeveloperExceptionPage();
            app.UseMvcWithDefaultRoute();
            app.UseStaticFiles();
            app.UseRuntimeInfoPage();
        }        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<EfDbContext>(options =>
                {
                    options.UseSqlServer(Configuration["data:ConnectionString"]);
                });

            services.AddTransient<ITabNavRepository, TabNavRepository>();
            services.AddTransient<ITabNavService, TabNavService>();
        }
    }
}

NuGet.Config:

<configuration>
  <packageSources><clear /><add key="AspNetCI" value="https://www.myget.org/F/aspnetcidev/api/v3/index.json" /><add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources></configuration>

“怎么將站點從ASP.NET 5 RC1升級至ASP.NET Core 1.0”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

菏泽市| 罗江县| 长汀县| 温泉县| 朔州市| 葵青区| 民县| 高阳县| 昭苏县| 井冈山市| 赤峰市| 大姚县| 宁夏| 茶陵县| 永清县| 仲巴县| 阿拉善左旗| 岐山县| 霍林郭勒市| 连州市| 元阳县| 子洲县| 肥乡县| 庄河市| 曲周县| 镇巴县| 纳雍县| 南乐县| 台安县| 海原县| 衡东县| 梨树县| 玛多县| 喜德县| 海林市| 资中县| 普宁市| 高邑县| 永城市| 三都| 黄冈市|