Jak opublikować jako oddzielny plik bez uwzględniania ich w pliku jednobiegowym

Strona zaktualizowana :
Data utworzenia strony :

Środowiska

Visual Studio
  • Visual Studio 2019
Rdzeń ASP.NET
  • 3.1

Co to jest pojedynczy plik?

Oprócz pliku exe, często trzeba będzie plik, taki jak dll do uruchomienia programu. Będziesz dystrybuować wiele plików i programów.

Teraz można uruchomić wszystkie pliki w jednym exe, publikując program za pomocą funkcji "Tworzenie pojedynczego pliku" dodanej z .NET Core 3.0. (Plik pdb jest plikiem informacji debugowania, więc nie trzeba go rozpowszechniać).

Jednak w niektórych przypadkach można umieścić plik konfiguracyjny w folderze z exe zamiast włączać go do exe. W tej sekcji opisano, jak to zrobić.

Przygotowanie do wyjścia z jednym plikiem

W przykładzie następująca konfiguracja projektu powinna być używana do ładowania pliku TextFile1.txt podczas uruchamiania. TextFile1.txt jest przeznaczony do dystrybucji z plikiem exe, więc sprawiają, że "Build Action: None" i "Kopiuj do katalogu wyjściowego: Kopiuj do nowego, jeśli nowy." Zawartość TextFile1.txt może być dowolna.

Można utworzyć program przy założeniu, że chcesz załadować pliki, które są rozproszone razem.

Jednak plik wykonywalny w jednym pliku jest faktycznie rozwinięty do oddzielnego folderu tymczasowego po jego uruchomieniu. Podczas ładowania pliku w ścieżce względnej należy określić go w folderze, w którym uruchomiono plik wykonywalny, a nie w folderze, w którym znajduje się plik wykonywalny.

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();
    }
  }
}

Podczas debugowania widać, że plik jest załadowany.

TextFile1.txt jest również drukowany w folderze wyjściowym, ponieważ nie został jeszcze skompilowany w jeden plik.

Opublikujmy go jako pojedynczy plik w tym stanie. Procedura jest pominięta, ponieważ publikacja nie jest przeznaczona.

Docelowy czas wykonywania musi być nieprzenośny, aby był pojedynczym plikiem.

Nie mam jeszcze nic ustawić, więc jest to jeden plik jak zwykle.

Nie ma textfile1.txt po uruchomieniu, więc pojawi się błąd.

Jak opublikować określony plik bez umieszczania go w jednym pliku

Otwórz plik projektu (csproj) w kodzie z plikiem, którego nie chcesz uwzględnić w projekcie.

Myślę, że to xml tak: Poszukaj pliku, dla którego chcesz zmienić ustawienia. W zależności od ustawień projektu może nie być potrzebny plik docelowy, więc może być konieczne dodanie go ręcznie.

<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>

Po znalezieniu pliku dodaj excludefromsinglefile z true, w następujący sposób: Jak sama nazwa wskazuje, jest wykluczony z jednego pliku.

<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>

Spróbuj opublikować po zapisaniu. Widać, że jest on publikowany z jednego pliku.

Nadal można uruchomić opublikowany plik, aby sprawdzić, czy działa poprawnie.