最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文輕松了解ASP.NET與ASP.NET?Core多環(huán)境配置對比

 更新時(shí)間:2022年04月18日 09:50:54   作者:gui.h  
ASP.NET?Core支持在多個(gè)環(huán)境中管理應(yīng)用程序,如開發(fā)(Development),預(yù)演(Staging)和生產(chǎn)(Production),下面這篇文章主要給大家介紹了關(guān)于ASP.NET與ASP.NET?Core多環(huán)境配置對比?的相關(guān)資料,需要的朋友可以參考下

前言

多環(huán)境配置應(yīng)該都很熟悉了,最為常見的環(huán)境便是Debug和Release,例如下圖是新建的一個(gè)asp.net項(xiàng)目,配置文件展開共有三個(gè)文件組成

有些開發(fā)者從來沒了解過Web.Debug.config和Web.Release.config,始終是一個(gè)Web.config文件改來改去來切換不同的配置,但凡有點(diǎn)追求都不能忍受這種煎熬。

asp.net下的多環(huán)境配置

雙擊打開Web.Debug.config和Web.Release.config任何一個(gè),看看里面的內(nèi)容。

Web.Debug.config
<?xml version="1.0" encoding="utf-8"?>

<!-- 有關(guān)使用 Web.config 轉(zhuǎn)換的詳細(xì)信息,請?jiān)L問 https://go.microsoft.com/fwlink/?LinkId=301874 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    在下例中,“SetAttributes”轉(zhuǎn)換將更改
    “connectionString”的值,僅在“Match”定位器找到值為“MyDB”的
    特性“name”時(shí)使用“ReleaseSQLServer”。

    <connectionStrings>
      <add name="MyDB"
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <!--
      在以下示例中,"Replace" 轉(zhuǎn)換將替換 Web.config 文件的
      整個(gè) <customErrors> 節(jié)。
      請注意,由于在 <system.web> 節(jié)點(diǎn)下只有一個(gè)
       customErrors 節(jié),因此無需使用 "xdt:Locator" 屬性。

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

微軟為了讓我們使用它,把不僅給出示例,還配上詳細(xì)的注釋,看過注釋和示例大概就該知道如何進(jìn)行配置,覆蓋Web.config中的配置。
下面展示下最為常用的appSettings如何配置

  <!--Web.config 開發(fā)環(huán)境-->
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    
    <add key="MyKey" value="Myvalue" />
  </appSettings>
  <!--Web.Release.config 生產(chǎn)環(huán)境-->
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    
    <add key="MyKey" value="Releasvalue" xdt:Transform="Replace" xdt:Locator="Match(key)" />
  </appSettings>

經(jīng)過這樣的配置后,本機(jī)開發(fā)時(shí)讀取到MyKey的值為Myvalue,發(fā)布生產(chǎn)環(huán)境時(shí)值為Releasvalue。
按照上面的配置,本地發(fā)布程序試試效果。

發(fā)布成功后,打開發(fā)布后生成的Web.config文件,我們發(fā)現(xiàn)開發(fā)環(huán)境下Web.config中對應(yīng)的值被替換了,這樣開發(fā)和生產(chǎn)配置分別配置在不同文件,不需要頻繁修改配置文件切換配置了。

如何增加額外的環(huán)境配置

有時(shí)候Debug和Release兩個(gè)環(huán)境還不能滿足我們的需要,需要增加更多的環(huán)境配置。

打開菜單生成-->配置管理器,新建一個(gè)TEST1環(huán)境

然后右鍵Web.config選擇添加配置轉(zhuǎn)換(第四個(gè))

會(huì)自動(dòng)生成一個(gè)Web.TEST1.config文件,非常的人性化,然后我們在該文件配置一些參數(shù)。

更改發(fā)布的配置,進(jìn)行發(fā)布。

打開發(fā)布成功后的Web.config文件

效果與預(yù)期一致。

aspnetcore下的多環(huán)境配置

aspnetcore中的配置文件被appsettings.json所取代,.NET Core中的配置是使用一個(gè)或多個(gè)配置提供程序執(zhí)行的。 配置提供程序使用各種配置源從鍵值對讀取配置數(shù)據(jù):

什么是配置提供程序

下表顯示了 .NET Core 應(yīng)用可用的配置提供程序。

提供程序通過以下對象提供配置
Azure 應(yīng)用配置提供程序Azure 應(yīng)用程序配置
Azure Key Vault 配置提供程序Azure Key Vault
命令行配置提供程序命令行參數(shù)
自定義配置提供程序自定義源
環(huán)境變量配置提供程序環(huán)境變量
文件配置提供程序JSON、XML 和 INI 文件
Key-per-file 配置提供程序目錄文件
內(nèi)存配置提供程序內(nèi)存中集合
應(yīng)用機(jī)密(機(jī)密管理器)用戶配置文件目錄中的文件

詳細(xì)內(nèi)容參考 .NET 中的配置
https://docs.microsoft.com/zh-cn/dotnet/core/extensions/configuration

其中以下部分比較值得注意

劃重點(diǎn):后來添加的配置提供程序會(huì)替代之前的密鑰設(shè)置
appsettings.Development.jsonappsettings.json后加載,則后加載的會(huì)覆蓋先加載配置的值,沒毛病!

多環(huán)境配置文件時(shí)如何加載

為了徹底弄清楚底層加載邏輯,下載源碼一探究竟。

builder.ConfigureAppConfiguration((hostingContext, config) =>
        {
            var env = hostingContext.HostingEnvironment;

            config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                  .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

            if (env.IsDevelopment())
            {
                if (!string.IsNullOrEmpty(env.ApplicationName))
                {
                    var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
                    if (appAssembly != null)
                    {
                        config.AddUserSecrets(appAssembly, optional: true);
                    }
                }
            }

            config.AddEnvironmentVariables();

            if (args != null)
            {
                config.AddCommandLine(args);
            }
        })

默認(rèn)的WebHostBuilder實(shí)現(xiàn)中,用環(huán)境變量env.EnvironmentName值拼接的json文件進(jìn)行加載。這也是為什么開發(fā)階段會(huì)加載appsettings.Development.json配置文件的原理。

開發(fā)階段的多環(huán)境

如何傳參修改環(huán)境變量EnvironmentName值是問題的關(guān)鍵,若能修改想要的值,然后創(chuàng)建對應(yīng)名稱的配置文件即可。

在web根目錄存在一個(gè)文件:Properties/launchSettings.json

其中有一個(gè)配置環(huán)境變量的配置

"environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
},

本地開發(fā)時(shí)只需要?jiǎng)?chuàng)建多個(gè)啟動(dòng)配置,分別設(shè)置不同的ASPNETCORE_ENVIRONMENT即可進(jìn)行切換了,修改后的launchSettings.json

// launchSettings.json
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:2364",
      "sslPort": 44302
    }
  },
  "profiles": {
    "Web1": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:7006;http://localhost:5006",
      "dotnetRunMessages": true
    },
    "Web1:Test": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "TEST"
      },
      "applicationUrl": "https://localhost:7006;http://localhost:5006",
      "dotnetRunMessages": true
    }
  }
}

Web1和Web1:Test啟動(dòng)選項(xiàng)便會(huì)同步顯示在VS啟動(dòng)選項(xiàng)中,切換為Web1:Test再運(yùn)行程序,就會(huì)加載appsettings.TEST.json,效果和appsettings.Development.json沒區(qū)別。

發(fā)布階段的實(shí)現(xiàn)多環(huán)境配置

在上文中我們學(xué)會(huì)了在本地配置多個(gè)不同環(huán)境配置進(jìn)行開發(fā),那如果需要發(fā)布的生產(chǎn)環(huán)境也有很多種配置,那如何讓程序自動(dòng)加載不同的配置文件呢,畢竟launchSettings.json文件只是在開發(fā)時(shí)搭配VS用的,既然launchSettings.json可以配置環(huán)境變量,沒了它我們手動(dòng)創(chuàng)建環(huán)境變量應(yīng)該也可以。在操作系統(tǒng)添加環(huán)境變量如:

也可以在程序啟動(dòng)時(shí)通過命令行傳參設(shè)置環(huán)境值。

但是這兩種我都感覺不方便,我們希望程序根據(jù)不同的環(huán)境發(fā)布好以后,只需要直接執(zhí)行就好,而不是需要進(jìn)行額外的配置或傳參。

EnvironmentName 屬性

在項(xiàng)目的工程文件中有EnvironmentName屬性,可以指定當(dāng)前EnvironmentName值,添加如下代碼

然后編譯后的,直接運(yùn)行,就能夠讀取到appsettings.TEST.json配置文件。

這配置不會(huì)覆蓋launchSettings.json中指定的環(huán)境值,但在影響發(fā)布后的EnvironmentName值,從而可以改變實(shí)現(xiàn)發(fā)布后默認(rèn)的EnvironmentName值。

那這樣設(shè)置后,豈不是發(fā)布后的EnvironmentName值只能是Test,如果要發(fā)布其他環(huán)境還要每次發(fā)布前修改這個(gè)值,那不是很麻煩嗎?

沒錯(cuò)如果沒有點(diǎn)其他手段,那這真是多此一舉啊,請看下圖。

懂了吧,我們只需要多配置一個(gè)PublishProfile發(fā)布文件,指定不同的配置項(xiàng),然后結(jié)合Condition條件來控制EnvironmentName。

至此,完美實(shí)現(xiàn)根據(jù)不同環(huán)境選擇不同的發(fā)布文件,進(jìn)行發(fā)布項(xiàng)目,目標(biāo)機(jī)器不需要做任何配置,直接運(yùn)行就是我們想要的效果。

總結(jié)雖然ASP.NET和ASP.NETCore實(shí)現(xiàn)多環(huán)境的方式不同,但是最后發(fā)布時(shí)我們可以做到一樣的效果,所有的配置都是一次性的,發(fā)布時(shí)指定對應(yīng)的PublishProfile即可。

總結(jié)

到此這篇關(guān)于ASP.NET與ASP.NET Core多環(huán)境配置對比的文章就介紹到這了,更多相關(guān)ASP.NET ASP.NETCore多環(huán)境配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 詳解在.net中讀寫config文件的各種方法

    詳解在.net中讀寫config文件的各種方法

    本篇文章主要介紹了在.net中讀寫config文件的各種方法,詳細(xì)的介紹各種配置文件的讀寫操作,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • ASP.NET Core與NLog集成的完整步驟

    ASP.NET Core與NLog集成的完整步驟

    NLog是一個(gè)免費(fèi)的日志記錄框架,專門為.net平臺(tái)下的框架提供日志功能,下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core與NLog集成的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • asp.net生成驗(yàn)證碼(純數(shù)字)

    asp.net生成驗(yàn)證碼(純數(shù)字)

    前幾天寫了個(gè)數(shù)字與字母混合的驗(yàn)證碼技術(shù),今天寫個(gè)純數(shù)字的驗(yàn)證碼。這里先寫個(gè)類
    2012-06-06
  • 深入講解.Net Core中的Api版本控制

    深入講解.Net Core中的Api版本控制

    這篇文章主要給大家介紹了關(guān)于.Net Core中Api版本控制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • .NET調(diào)用控制臺(tái)下生成的exe文件,傳參及獲取返回參數(shù)的思路及代碼

    .NET調(diào)用控制臺(tái)下生成的exe文件,傳參及獲取返回參數(shù)的思路及代碼

    .NET調(diào)用控制臺(tái)下生成的exe文件,傳參及獲取返回參數(shù)的思路及代碼,需要的朋友可以參考一下
    2013-06-06
  • C#可以減少或不使用switch有什么方法

    C#可以減少或不使用switch有什么方法

    減少或不使用switch,大家有什么好的方法,使用工廠方法來處理,可以創(chuàng)建一個(gè)工廠接口,然后每個(gè)方法設(shè)計(jì)為一個(gè)工廠類,并實(shí)現(xiàn)工廠接口,感興趣的朋友可以了解下
    2013-03-03
  • .Net?Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟

    .Net?Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟

    最近在使用調(diào)度程序創(chuàng)建簡單的服務(wù),該服務(wù)將執(zhí)行一些重復(fù)的IO操作,使用的是Coravel調(diào)度庫,下面這篇文章主要給大家介紹了關(guān)于.Net?Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟,需要的朋友可以參考下
    2022-08-08
  • DropDownList綁定數(shù)據(jù)表實(shí)現(xiàn)兩級(jí)聯(lián)動(dòng)示例

    DropDownList綁定數(shù)據(jù)表實(shí)現(xiàn)兩級(jí)聯(lián)動(dòng)示例

    這篇文章主要介紹了DropDownList綁定數(shù)據(jù)表實(shí)現(xiàn)兩級(jí)聯(lián)動(dòng)具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-03-03
  • ASP.NET?Core中MVC模式實(shí)現(xiàn)路由二

    ASP.NET?Core中MVC模式實(shí)現(xiàn)路由二

    這篇文章介紹了ASP.NET?Core中MVC模式實(shí)現(xiàn)路由的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 如何使用Python實(shí)現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)換成中國漢字

    如何使用Python實(shí)現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)換成中國漢字

    本文提供了一個(gè)Python代碼示例,用于將阿拉伯?dāng)?shù)字轉(zhuǎn)換為中文漢字表示,代碼定義了數(shù)字到漢字的映射表,并實(shí)現(xiàn)了處理不同位數(shù)(如個(gè)、十、百、千、萬等)的函數(shù),特別地,處理方式包括對大數(shù)字的分解和轉(zhuǎn)換,以及對連續(xù)零的特殊處理,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評(píng)論

道孚县| 溧阳市| 新绛县| 广州市| 石门县| 蒙阴县| 曲周县| 石首市| 台北县| 温宿县| 盖州市| 定州市| 怀宁县| 蓝山县| 敦煌市| 凌源市| 泾川县| 布拖县| 鹿邑县| 巴林左旗| 鄂尔多斯市| 巨鹿县| 华容县| 萨嘎县| 吴忠市| 辛集市| 桐梓县| 漯河市| 上蔡县| 微博| 博野县| 丰顺县| 宜昌市| 廊坊市| 古蔺县| 大连市| 武功县| 赫章县| 长岭县| 广东省| 密云县|