如何作為單獨的文件發佈,而不是包含在作為單個可執行文件發佈的檔中

更新頁 :
頁面創建日期 :

環境

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>

保存後,請嘗試發佈它。 您可以看到,它已從單個檔中排除並發佈。

您可以驗證已發布的檔是否正常工作。