如何作為單獨的文件發佈,而不是包含在作為單個可執行文件發佈的檔中
環境
- Visual Studio
-
- Visual Studio 2019
- ASP.NET 核心
-
- 3.1
什麼是單個檔?
通常,除了 exe 檔之外,還需要 dll 等檔才能運行程式。 程序分發涉及多個檔和分發。
通過使用 .NET Core 3.0 添加的功能"創建單個檔"發佈程式,現在可以將所有檔一起運行到單個 exe 中。 (pdb 檔案是除錯資訊檔,因此無需分發)
但是,在某些情況下,您可能希望將配置檔放在 exe 的資料夾中,而不是包含在 exe 中。 下面介紹如何操作。
準備單一檔案輸出
例如,假設您有一個專案配置,並在啟動時載入 TextFile1.txt 檔。 由於 TextFile1.txt 假定與 exe 檔一起分發,因此應將其設置為"生成操作:無"和"複製到輸出目錄:如果是新檔,則複製"。 TextFile1.txt 的內容可以是任何內容。
您可以編寫程式,假定程式將載入一起分發的檔。
但是,單個檔的可執行文件實際上在運行它時將部署到另一個臨時資料夾。 在相對路徑中載入檔時,必須指定可執行檔啟動的資料夾,而不是包含可執行檔的資料夾。
using System;
using System.Diagnostics;
using System.IO;
namespace ExcludeFromSingleFile
{
class Program
{
static void Main(string[] args)
{
using var processModule = Process.GetCurrentProcess().MainModule;
Console.WriteLine(File.ReadAllText(Path.Combine(Path.GetDirectoryName(processModule.FileName), "TextFile1.txt")));
Console.ReadKey();
}
}
}
除錯執行時,您可以看到檔已載入。
由於尚未在單個檔中,因此 TextFile1.txt 也輸出到輸出資料夾。
現在,讓我們將此狀態作為單個文件發佈。 由於發佈說明不是目的,因此省略了該過程。
目標運行時必須是可移植的,才能成為單個檔。
還沒有設置任何東西,所以像往常一樣,它成為一個檔。
運行時,沒有 TextFile1.txt,這會導致錯誤。
如何在不包含在單一檔案中發布特定檔案
在專案中包含不想包含在單個檔中的檔時,在代碼中打開專案檔 (csproj)。
我認為XML如下所示。 尋找要更改其設定的檔。 根據項目的設定,您可能沒有目標檔,因此您需要手動添加這些檔。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="TextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
找到目標檔案後,將ExcludeFromSingleFile添加到true中,如下所示: 顧名思義,這意味著從單個檔中排除它。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="TextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<!-- ここから追加 -->
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<!-- ここまで追加 -->
</None>
</ItemGroup>
</Project>
保存後,請嘗試發佈它。 您可以看到,它已從單個檔中排除並發佈。
您可以驗證已發布的檔是否正常工作。