asp.net core 中靈活的配置方式

来源:http://www.cnblogs.com/dxp909/archive/2017/07/01/7102305.html
-Advertisement-
Play Games

asp.net core支持外部文件和命令行參數方式來配置系統運行所需要的配置信息,我們從下麵兩個常用場景來具體說下具體使用方法。 一、監聽地址及埠配置 1,命令行方式 asp.net core系統通過命令行方式啟動,使用的命令如下: dotnet run 上面的命令直接在源代碼目錄下執行,便可以 ...


asp.net core支持外部文件和命令行參數方式來配置系統運行所需要的配置信息,我們從下麵兩個常用場景來具體說下具體使用方法。

 

一、監聽地址及埠配置

1,命令行方式

asp.net core系統通過命令行方式啟動,使用的命令如下:

dotnet run

上面的命令直接在源代碼目錄下執行,便可以編譯程式並運行。那對於已經發佈好的程式,就不能使用上面的指令了,應該使用下麵的指令:

dotnet 程式集文件名(程式集文件名就是程式發佈後生成的dll文件)

上面兩個指令都能夠啟動應用程式。程式啟動後,預設監聽地址及埠是http://localhost:5000。但是程式發佈後,肯定不會使用預設的地址及埠,那如果要想讓啟動時監聽其他的地址或功能變數名稱怎麼辦?答案是使用--urls參數,具體指令格式如下:

dotnet run --urls="http://功能變數名稱:埠號" 

如果想設置多個功能變數名稱,可以使用分號分隔。

程式預設情況下是不支持參數傳遞的,我們需要對程式進行一些配置。首先需要引入Microsoft.Extensions.Configuration.CommandLine庫文件,然後在main方法中添加commandline支持,具體代碼如下:

  public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
              .AddCommandLine(args)//增加commandline支持
              .Build();

            var host = new WebHostBuilder()
                .UseConfiguration(config)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }
    }

  經過配置後就可以使用上面的指令傳遞參數了

2,配置文件

asp.net core配置信息也可以放置在一個配置文件中,系統啟動時進行載入配置文件內容,來影響程式啟動所需要的環境參數。我們來看一下具體操作過程。

首先我們需要引入一個庫文件"Microsoft.Extensions.Configuration.Json",然後在main方法中引入配置文件路徑信息,具體代碼如下:

    public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("hosting.json")
                .Build();

            var host = new WebHostBuilder()
                .UseConfiguration(config)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }
    }

  

  

 通過上面方式,我們就增加了一個外部的hosting.json配置文件,在裡面我們可以增加監聽地址信息,內容如下:

 

{
  "server.urls": "http://*:5001"
}

  

二、運行環境配置

在進行項目開發時,常常要求開發環境,測試環境及正式環境的分離,並且不同環境運行的參數都是不一樣的,比如監聽地址,資料庫連接信息等。當然我們把配置信息保存到一個文件中,每次發佈的時候,可以先修改配置文件的內容,然後再進行程式發佈,這樣操作起來無疑是很麻煩,每次發佈都得先確定對應的環境,然後修改配置信息,如果需要同時發佈多個環境版本,那就得進行多次操作。

asp.net core 其實已經考慮到了這樣的場景,我們可以先看下下麵的代碼:

 public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

 上面的代碼是出現在startup.cs文件中,裡面首先使用AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)載入appsettings配置文件,這個文件里可以放置所有環境共用的信息,後面有一句AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true),env.EnvironmentName其實就是系統環境,根據啟動時設置的EnvironmentName不同,可以載入對應的配置文件內容。

 現在的問題是如何去指定這個EnvironmentName?

1,通過命令行指定environment

在執行dotnet run之前,可以先執行以下下麵的指令:

set ASPNETCORE_ENVIRONMENT= 環境名稱,註意這裡沒有引號,直接把環境名稱寫成具體的值即可,比如 set ASPNETCORE_ENVIRONMNET=development

然後再執行dotnet run指令,這樣當前運行就會按照set指令中設置的環境進行運行

2,直接給dotnet run指令傳遞具體參數

先看直接的執行效果:dotnet run --ASPNETCORE_ENVIRONMENT=development

具體做法:引入Microsoft.Extensions.Configuration.CommandLine,Microsoft.Extensions.Configuration.EnvironmentVariables庫文件,然後在main方法中增加環境參數的支持,具體代碼如下:

    public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                .AddEnvironmentVariables()
                .AddCommandLine(args)
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("hosting.json")
                .Build();

            var host = new WebHostBuilder()
                .UseEnvironment(config["ASPNETCORE_ENVIRONMENT"])
                .UseConfiguration(config)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }
    }

 關鍵是AddEnvironmentVariables(),UseEnvironment(config["ASPNETCORE_ENVIRONMENT"])兩處的處理。這樣我們就可以在dotnet run指令後面增加對應的環境參數。 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 終於可以愉快的用谷歌了,容我哭一會,下麵會闡述下樓主的心塞歷程。 linux系統裡面不能翻牆,簡直就是受罪。 準備工作: 1 一個virtualbox管理器,這個是免費,挺適合新手用,還有一個是VMware,功能更加強大,不過是收費軟體 。這兩個選一個都行。 2 安裝好Ubuntu16.04,下載包 ...
  • #聲明腳本 #!/bin/bash #列印" cfb "echo " cfb " #java環境變數JAVA_HOME=/usr/java/jdk1.8.0_11CLASSPATH=$JAVA_HOME/bin #指定需要執行jar包的位置,可自行設置 JARPATH=/home/haha/Desk ...
  • " 1、文件夾操作 " "1.1、DIR(directory)命令" "1.2、TREE 命令" "1.3、CD(change directory)命令" "1.4、MD(make directory)命令" "1.5、RD(remove directory)命令" " 2、文件操作 " "2.1、 ...
  • 一、引言 IOC-Invertion of Control,即控制反轉,是一種程式設計思想,世上本沒有路,走的人多了便有了路,本文將一步步帶你瞭解IOC設計思想的演進之路。 在學習IOC之前我們先初步瞭解幾個概念 依賴(Dependency):就是有聯繫,表示一個類依賴於另一個類 依賴倒置原則(DI ...
  • 我們在調試WEB程式的時候可以把本地web程式掛載到本地IIS,然後訪問程式,通過附加進程的方式(w3wp)來調試程式(個人非常喜歡的一種調試方式),還有一種比較傳統的方式就是通過VS自帶的F5來執行,但是感覺很蹩腳,如果修改c#代碼我們不得不停止當前程式然後重新編譯重新F5來啟動,感覺時間很浪費, ...
  • 多線程使用過程中,除了線程同步的問題要考慮外,異常處理也是經常要面對的事情。 預設主線程捕獲不到非同步線程的異常 如下代碼: 1 namespace ConsoleApplication29 2 { 3 class Program 4 { 5 static void Main(string[] arg ...
  • 使用多線程很容易,但是如果多個線程同時訪問一個共用資源時而不加以控制,就會導致數據損壞。所以多線程併發時,必須要考慮線程同步(或稱線程安全)的問題。 什麼是線程同步 多個線程同時訪問共用資源時,使多個線程順序(串列)訪問共用資源的機制。 註意: 1,共用資源,比如全局變數和靜態變數。 2,訪問,一般 ...
  • ARP斷網攻擊是什麼?可以吃嗎?如果可以吃它好吃嗎? ARP斷網攻擊就是通過偽造IP地址和MAC地址實現ARP欺騙,能夠在網路中產生大量的ARP通信量使網路阻塞,攻擊者只要持續不斷的發出偽造的ARP響應包就能更改目標主機ARP緩存中的IP-MAC條目,造成網路中斷或中間人攻擊。 那就是不可以吃咯? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...