第一次使用 Visual Studio 2022 創建 Net Core 專案和技術名詞小記
做為本篇 Net Core 第一篇筆記,這邊記錄Visual Studio 建立專案一些事情。
建置專案
這邊修改方案、專案名稱。這邊要注意,1個方案可以有很多專案。每一個專案下面只有一個 Program.cs 程式,這邊我目前得知預設好像沒有像 Java 一樣可以設定很多 main 方法。
這邊可以針對設定做調整。
一些知識
.csproj
.csproj
是根據程式語言的設定檔所使用。一開始接副檔名還滿長的,但其實就是cs
、project
縮寫。
cs
。在專案右鍵點點選編輯專案檔
或點專案兩下也可以進去修改文件。
這邊我在後期研究發現這個跟專案
有關係,當沒有這個的話,Visual Studio 無法讀到這區程式路徑。
我後來更深入了解這個跟 MS Build 有關係,有空再升入研究。
- 使用 MSBuild - MSBuild | Microsoft Learn
- 使用 MSBuild 建置方案檔(sln)與建置專案檔(csproj)的陷阱與注意事項 | The Will Will Web
- Jenkins 搭配MSBuild 建置與發佈 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
針對 csproj 檔案
TargetFramework
在應用程式中指定你的目標框架(TargetFramework)。
指定目標版本需要用TargetFrameworkMoniker(TFM)。
AspNetCoreHostingModel
指定應用程式的託管形式。
有兩種:
- InProcess
- OutOfProcess
ASP.NET Core 預設採用InProcess託管。
最新版我看文件好像採用OutOfProcess
,詳細使用 IIS 和 ASP.NET Core 進行跨進程裝載 | Microsoft Docs文章。
也可以看老 ASP.NET Core 程式的 IIS InProcess 模式設定問題-黑暗執行緒。
InProcess
InProcess
是指 ISS 程式(w3wp.exe)中託管我們的 ASP.NET Core應用程式。
OutOfProcess
Web請求轉發到後端 ASP.NET Core 中,而整個應用程式運行在 ASP.NET Core 中內置的 Kestrel 中。
PackageReference
用於包含對應應用程式安裝的 nuget 包的引用。
Metapackage(綜合包) - Microsoft.AspNetCore.App
Metapackage 本身沒有任何內容。
Microsoft.AspNetCore.App 不需要指版本。
Main (Web)主程式撰寫
Program.cs => Startup.cs
重點有兩個設定。
-
註冊 DI
-
設定 Middleware 地方
這邊先不細談。
CreateDefaultBuilder()
執行的一些任務
- 設置 Web 服務器
- 加載主機和應用程式配置表訊息
- 配置日誌(log)記錄
Hello world 測試
|
|
WriteAsync 未定義
.net core WriteAsync 方法未定义_已解决_博问_博客园
c# - How to print process name in StartUp.cs for .net core 3.1 - Stack Overflow
程式碼上面加下面這段就可以了。
|
|
不過還滿迷的,有空來研究為什麼。
InProcess 託管
|
|
InProcess
是指 ISS 程式(w3wp.exe or iisexpress.exe)中託管我們的 ASP.NET Core 應用程式。
InProcess
比 OuOfProcess
託管提供了更高的吞吐量。
|
|
可以選擇別的託管
Process.ProcessName Property (System.Diagnostics) | Microsoft Docs
OutOfProcess
有2個 Web 服務器 - 內部 Web 服務器和外部 Web 服務器。
- 內部 Web 服務器是 Kestrel。
- 外部 Web 服務器呵以是ISS,Nginx或Apache。
什麼是 Kestrel Web Server?
Kestrel 是ASP.NET Core 的跟平台WEB服務器
Kestrel本身可以用作邊綠服務器
Kestrel 中用於託管應用程式的進程是dotnet.exe
。
可參考:
預設 Port
ISS: 3290
DOTNET: 5000
LaunchSetting.json
在 Properties 底下設定。
原始碼參考
環境變數
ASP.NET Core 中的設定來源:
- appsettings.json,appsettings.
Environment
.json 不同環境下對應不同的主機環境 - User Secrets(用戶機密)
- Environment variables
- Command line arguments(命令參數)
以上配置順序,後會蓋前。
appSettings.json
可以依照還境變數ASPNETCORE_ENVIRONMENT
來改變裡面設定的值。
|
|
User Secrets
設定環境變數
ASPNETCORE_ENVIRONMENT=Development
這邊設定可以看出會指定 ASPNETCORE_ENVIRONMENT 環境變數套用在 ASP.NET Core 上面。
command line argument
|
|