我開發了一個用 .Net 6 構建的工具,它提供了一個休息 api。我修改了appsettings.json檔案,以便它禁止在運行 api 專案時通常出現在控制臺中的默認“資訊”訊息:
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.AspNetCore": "Warning",
"Microsoft": "Warning",
"System": "None"
}
}
這適用于我的本地構建,除了我的自定義日志訊息之外的所有訊息都被抑制,但在作為 dotnet 工具發布后,不幸的是,默認資訊訊息繼續顯示到 cli。如何壓制這些?
編輯:更多細節——我已經確認 appsettings.json 檔案位于包中,并且它安裝在全域工具安裝檔案夾中。我還確認在將 appsettings.json 檔案復制/粘貼到可執行檔案的同一目錄后,該工具按預期運行,這表明可執行檔案找不到 appsettings.json 檔案。
這只是在黑暗中的一個鏡頭,但是,工具名稱(和可執行檔案名稱)與包名稱及其在 .store 中的關聯目錄不同。我想知道這是否與設定檔案的可執行搜索路徑有關。
uj5u.com熱心網友回復:
此問題是由于可執行檔案無法找到分發中包含的 appsettings.json 檔案造成的。根據這個來源,這看起來像是故意的行為:
IHostEnvironment.ContentRootPath 屬性表示在托管應用程式(包括 ASP.NET 應用程式)中加載 appsettings.json 和其他內容檔案的默認目錄。此屬性的值默認為 Environment.CurrentDirectory,即應用程式的當前作業目錄。這種行為允許相同的應用程式在不同的作業目錄下執行,并使用每個目錄中的內容。
當 Windows 行程(應用程式或服務)在未指定作業目錄的情況下啟動時,將使用創建它的行程的作業目錄。
由于這是我作為 webdev 的第一個 dotnet 工具,不熟悉將 .Net 用于大多數 CLI 應用程式,這對我來說是一個曲線球,但一旦我理解了這個問題,修復就相對直接了。
我的工具不需要使用本地設定進行配置,因此必須在 Program.cs 中更新 WebHost 內容根路徑,如下所示:
var builder = WebApplication.CreateBuilder(new WebApplicationOptions()
{
ContentRootPath = Directory.GetParent(Assembly.GetExecutingAssembly().Location)?.FullName
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518563.html
標籤:网.net-6.0
