단일 실행 파일에 포함되지 않고 별도의 파일로 게시하는 방법

페이지 업데이트 :
페이지 생성 날짜 :

환경

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 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>

파일을 찾은 다음 ExcludeFromSingleFiletrue 로 추가 합니다. 이름 같이 단일 파일에서 제외 한다는 뜻입니다.

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

저장 한 후 실행 하 여 보시기 바랍니다. 단일 파일에서 제외 되어 발급 된 것을 알 수 있습니다.

게시 된 파일을 실행 하 여 올바르게 작동 하는지 확인할 수 있습니다.