有的時候你有多個應用程式,它們需要使用相同的紀錄檔設定。在這種情況下,你可以將紀錄檔設定放在一個共用的位置,然後通過專案檔案快速參照。方便快捷,不用重複設定。
通過在專案資料夾中建立一個名為 Directory.Build.props
的檔案,可以將設定應用於所有專案。這個檔案的內容如下:
<Project>
<ItemGroup Condition="$(MyApplication) == 'true'">
<Content Include="..\Shared\appsettings.logging.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<Link>Shared\appsettings.logging.json</Link>
</Content>
</ItemGroup>
</Project>
我們可以將這個檔案放在解決方案資料夾的根目錄中,這樣就可以將設定應用於所有專案。
由於我們定義了一個條件,所以我們可以通過設定 MyApplication
屬性來控制是否應用這個設定。在這個例子中,我們將 MyApplication
屬性設定為 true
,所以我們只要在專案檔案中設定這個屬性,就可以應用這個設定。
在專案檔案中,我們需要設定 MyApplication
屬性,然後參照 Directory.Build.props
檔案。這樣就可以應用 Directory.Build.props
檔案中的設定了。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<MyApplication>true</MyApplication>
</PropertyGroup>
</Project>
在 Shared
資料夾中,我們需要建立一個名為 appsettings.logging.json
的檔案,這個檔案就是我們的紀錄檔組態檔。這個檔案的內容如下:
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}"
}
}
]
}
}
在 Program.cs
檔案中,我們需要將紀錄檔組態檔的路徑傳遞給 CreateHostBuilder
方法。這樣就可以使用 appsettings.logging.json
檔案中的設定了。
private void LoadSharedAppSettings(WebApplicationBuilder builder)
{
var appsettingsParts = new[] { "logging" };
var sharedBaseDir = Path.Combine(AppContext.BaseDirectory, "Shared");
foreach (var appsettingsPart in appsettingsParts)
{
builder.Configuration.AddJsonFile(Path.Combine(sharedBaseDir, $"appsettings.{appsettingsPart}.json"),
true, true);
builder.Configuration.AddJsonFile(
Path.Combine(sharedBaseDir,
$"appsettings.{appsettingsPart}.{builder.Environment.EnvironmentName}.json"),
true, true);
}
}
最後我們看一下資料夾的結構:
├───MyApplication1
│ ├───Properties
│ └───wwwroot
├───MyApplication2
│ ├───Properties
│ └───wwwroot
├───Shared
│ └───appsettings.logging.json
└───MyApplication.sln
通過在專案資料夾中建立一個名為 Directory.Build.props
的檔案,可以將設定應用於所有專案。在專案檔案中,我們需要設定 MyApplication
屬性,然後參照 Directory.Build.props
檔案。在 Program.cs
檔案中,我們需要將紀錄檔組態檔的路徑傳遞給 CreateHostBuilder
方法。這樣就可以使用 appsettings.logging.json
檔案中的設定了。
Directory.Build.props: https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2022&WT.mc_id=DX-MVP-5003606#directorybuildprops-and-directorybuildtargets
[2]appsettings.json: https://learn.microsoft.com/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0&WT.mc_id=DX-MVP-5003606#appsettingsjson