關於 .Net Core runtimeconfig 文件說明

来源:https://www.cnblogs.com/wxmayifei/archive/2019/08/22/11394038.html
-Advertisement-
Play Games

在項目的bin\debug\netcoreapp${Version}下麵能夠找到這個${AppName}.runtimeconfig.json文件,簡單來說,它就是用來定義應用程式所用的共用框架(.Net Core App)以及運行時選項 的一個文件。 一個簡單的例子 1、用來決定以哪個版本的.ne ...


  在項目的bin\debug\netcoreapp${Version}下麵能夠找到這個${AppName}.runtimeconfig.json文件,簡單來說,它就是用來定義應用程式所用的共用框架(.Net Core App)以及運行時選項 的一個文件。

   一個簡單的例子

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.2",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.2.0"
    }
  }
}

1、用來決定以哪個版本的.net core 來啟動應用程式的參數

runtimeconfig.json

{
  "runtimeOptions": {
    "framework": {
      "name": "Microsoft.AspNetCore.App",
      "version": "2.2.0"  //指的是可運行的最低版本
    }
  }
}

.csproj 文件中

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" />
</ItemGroup>

覆蓋最小值(不更改文件)的方法是使用dotnet exec --fx--version

 

到.Net Core >= 3.0 的時候, 可以使用多個共用框架,並且不再作為Nuget包引用,原先做為Nuget包顯示,但實際上並不由Nuget來管理,有可能是開發團隊設計上的一個失誤。

runtimeconfig.json

{
  "runtimeOptions": {
    "frameworks": [
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "3.0.0"
      },
      {
        "name": "Microsoft.WindowsDesktop.App",
        "version": "3.0.0"
      }
    ]
  }
}

.csproj 文件中

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App" />
  <FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>

在.Net Core 3.0 會自動在更高的版本上運行

預設情況下, 會自動匹配主要和次要版本號,在其中找到最高的版本來運行,但如果找不到的話,它就有可能會去找更高的版本來運行,也可以回退以適應缺少特定運行時環境,下麵的rollForward選項可以配置策略,在 這兒 可以找到一些說明

runtimeconfig.json

{
  "runtimeOptions": {
    "rollForward": "Major" 
  }
}

 rollForward 可用的值

LatestPatch  前滾到最高的補丁版本,但這會禁用次要版本前滾
Minor 

預設使用的值,如果缺少請求的次要版本,請前滾到最低的較高次要版本;

如果存在請求的次要版本,則使用 LatestPatch 策略。

Major 

如果請求主要版本缺失,則前滾至最低的較高主要版本和最低次要版本。

如果存在請求的主要版本,則使用 Minor 策略。

LatestMinor 即使請求的次要版本存在,也可以前滾到最高次要版本。
LatestMajor  即使請求主要版本存在,也可以前滾到最高主要和最高次要版本。
Disable 

不要向前滾動,僅綁定到指定的版本,不建議將此策略用於正常用途,

因為它禁用前滾到最新修補程式的功能,建議僅用於測試。

 

在.NET Core 3.0之前,預設情況下會使用安裝在電腦上的最高補丁版本的 .Net Core 運行,可以使用如下配置來禁用

註意,此配置在.Net Core 3.0之後已經被廢棄

runtimeconfig.json

{
  "runtimeOptions": {
    "applyPatches": false
  }
}

 

在.NET Core 3.0之前,如果在電腦上找不適合的 .Net Core 版本(匹配主要和次要版本號,預設情況下最高補丁版本),他有可能會使用電腦上安裝的最新版本,通過以下配置來控制

註意,此配置在.Net Core 3.0之後已經被廢棄

runtimeconfig.json

  {
  "runtimeOptions": {
    "rollForwardOnNoCandidateFx": 1
  }
}

舉個例子說明下,如果當前 .Net Core Version = 2.10

rollForwardOnNoCandidateFx的值
可相容的.Net Core版本
0  >=2.1.0, < 2.2.0
1

預設的

>=2.1.0, < 3.0.0

2 >=2.1.0

 

 

詳細說明可參考這篇文章 Roll Forward On No Candidate Fx

 

2:運行時包存儲區

這是包在磁碟上的存儲目錄(通常情況下,在 macOS/Linux 上是 /usr/local/share/dotnet/store,在 Windows 上是 C:/Program Files/dotnet/store)

runtimeconfig.json

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.1"  //tfm: target framework
  }
}

.csproj

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

 

 3:從其他地方載入Assembly的路徑(類似於PrivatePath)

runtimeconfig.json

{
  "runtimeOptions": {
    "additionalProbingPaths": [
      "D:\\Project\\XXXX"
    ]
  }
}

.csproj

<ItemGroup>
  <AdditionalProbingPath Include="D:\Project\XXX" />
</ItemGroup>

.csproj只會影響到runtimeconfig.dev.json,這個文件只會在開發的時候有用,到生產環境無效了,這兒要註意

 

4:運行時設置

這是一個Key Value 鍵值對的設置,可以用來配Thread Pool Size, AppDomain ,Globalization 等的行為 ,詳細可以參考 CLR-Configuration-knobs

runtimeconfig.json

{
  "runtimeOptions": {
    "configProperties": {
      "key": "value"
    }
  }
}

 

 

除了Net Core 中已定義的,如果需要,也可以配置一些自定義的項,參考如下

runtimeconfig.json

{
  "runtimeOptions": {
    "configProperties": {
      "DefaultTheme": "blue",
      "DefaultLanguage": "zh-CN",
      "IsEnableJwt" : true
    }
  }
}

.csproj 

<ItemGroup>
  <RuntimeHostConfigurationOption Include="DefaultTheme" Value="blue" />
  <RuntimeHostConfigurationOption Include="DefaultLanguage" Value="zh-CN" />
  <RuntimeHostConfigurationOption Include="IsEnableJwt" Value="true" />
</ItemGroup>

C# 獲取自定義的值

var defaultTheme = System.AppContext.GetData("DefaultTheme") as string;

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 一、概述 1. 什麼是代理 我們大家都知道微商代理,簡單地說就是代替廠家賣商品,廠家“委托”代理為其銷售商品。關於微商代理,首先我們從他們那裡買東西時通常不知道背後的廠家究竟是誰,也就是說,“委托者”對我們來說是不可見的;其次,微商代理主要以朋友圈的人為目標客戶,這就相當於為廠家做了一次對客戶群體的 ...
  • 本篇概述==> 數組(依舊只敘述與C++不同的地方,或者一些應用方法例子,畢竟語言是共通的,多了也是廢話.jpg) 一,如果創建一維數組,二維數組,以及 N維數組(以此類推)呢 二,數組的一些方法(排序,複製.......) 1. 增強型 For 迴圈 用來取值,不能修改數組裡的值,相當於 普通 f ...
  • 一. 函數式編程 Java8所有的新特性基本基於函數式編程的思想,函數式編程的帶來,給Java註入了新鮮的活力。 下麵來近距離觀察一下函數式編程的幾個特點: 函數可以作為變數、參數、返回值和數據類型。 基於表達式來替代方法的調用 函數無狀態,可以併發和獨立使用 函數無副作用,不會修改外部的變數 函數 ...
  • 可能你是第一次聽說TomatoLog,沒關係,我可以從頭告訴你,通過瞭解番茄日誌,希望能幫助有需要的朋友,番茄日誌處理將大大降低你採集、分析、處理日誌的過程。 ...
  • 非空引用類型——C 8.0 原文地址:https://devblogs.microsoft.com/dotnet/try out nullable reference types/?utm_source=vs_developer_news&utm_medium=referral 該新增的特性最關鍵的 ...
  • 源碼: ...
  • 源碼: ...
  • 簡介 Socean.RPC是一個.Net下的高性能RPC框架,框架以高性能、高穩定性為目標,底層基於socket,代碼簡潔,總代碼量大約在2000行,無第三方庫引用,框架性能較高,在雙核i5筆記本上可達10w+每秒的處理量,支持10000長連接消息發送(每秒發10個短消息),均穩定運行,記憶體和cpu ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...