.NET Core 애플리케이션을 프레임워크 종속 배포로 배포할 수 있습니다. 이 배포는 애플리케이션 이진 파일을 포함하지만 대상 시스템에 .NET Core가 있는지 여부에 따라 달라지거나 애플리케이션과 .NET Core 이진 파일을 모두 포함하는 자체 포함 배포로 배포할 수 있습니다. .NET Core 애플리케이션 배포에 대한 개요는 .NET Core 애플리케이션 배포를 참조하세요.
다음 섹션에서는 Microsoft Visual Studio를 사용하여 다음과 같은 종류의 배포를 만드는 방법을 보여 줍니다.
- 프레임워크 종속 배포
- 타사 종속성을 사용하는 프레임워크 종속 배포
- 자체적 실행 가능한 배포
- 자체 포함 배포 및 타사 종속성
Visual Studio를 사용하여 .NET Core 애플리케이션을 개발하는 방법에 대한 자세한 내용은 .NET Core 종속성 및 요구 사항을 참조하세요.
프레임워크 종속 배포
타사 종속성이 없는 프레임워크 종속 배포를 배포하려면 앱을 빌드, 테스트 및 게시하기만 하면 됩니다. C#으로 작성된 간단한 예제는 프로세스를 보여 줍니다.
프로젝트 만들기
파일>새>프로젝트를 선택합니다. 새 프로젝트 대화 상자의 설치된 프로젝트 유형 창에서 언어(C# 또는 Visual Basic) 프로젝트 범주를 확장하고 .NET Core를 선택한 다음 가운데 창에서 콘솔 앱(.NET Core) 템플릿을 선택합니다. 이름 텍스트 상자에 프로젝트 이름(예: "FDD")을 입력합니다. 확인 단추를 선택합니다.
애플리케이션의 소스 코드를 추가합니다.
편집기에서 Program.cs 또는 Program.vb 파일을 열고 자동 생성된 코드를 다음 코드로 바꿉다. 사용자에게 텍스트를 입력하라는 메시지를 표시하고 사용자가 입력한 개별 단어를 표시합니다. 정규식을
\w+
사용하여 입력 텍스트의 단어를 구분합니다.using System; using System.Text.RegularExpressions; namespace Applications.ConsoleApps { public class ConsoleParser { public static void Main() { Console.WriteLine("Enter any text, followed by <Enter>:\n"); String? s = Console.ReadLine(); ShowWords(s ?? "You didn't enter anything."); Console.Write("\nPress any key to continue... "); Console.ReadKey(); } private static void ShowWords(String s) { String pattern = @"\w+"; var matches = Regex.Matches(s, pattern); if (matches.Count == 0) { Console.WriteLine("\nNo words were identified in your input."); } else { Console.WriteLine($"\nThere are {matches.Count} words in your string:"); for (int ctr = 0; ctr < matches.Count; ctr++) { Console.WriteLine($" #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}"); } } } } }
Imports System.Text.RegularExpressions Namespace Applications.ConsoleApps Public Module ConsoleParser Public Sub Main() Console.WriteLine("Enter any text, followed by <Enter>:") Console.WriteLine() Dim s = Console.ReadLine() ShowWords(s) Console.Write($"{vbCrLf}Press any key to continue... ") Console.ReadKey() End Sub Private Sub ShowWords(s As String) Dim pattern = "\w+" Dim matches = Regex.Matches(s, pattern) Console.WriteLine() If matches.Count = 0 Then Console.WriteLine("No words were identified in your input.") Else Console.WriteLine($"There are {matches.Count} words in your string:") For ctr = 0 To matches.Count - 1 Console.WriteLine($" #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}") Next End If Console.WriteLine() End Sub End Module End Namespace
앱의 디버그 빌드를 만듭니다.
빌드 솔루션 빌드>를 선택합니다. 디버그시작 디버깅을 선택하여 애플리케이션의 > 빌드를 컴파일하고 실행할 수도 있습니다.
앱을 배포합니다.
프로그램을 디버그하고 테스트한 후 앱과 함께 배포할 파일을 만듭니다. Visual Studio에서 게시하려면 다음을 수행합니다.
솔루션 구성을 도구 모음의 디버그 에서 릴리스 로 변경하여 앱의 릴리스(디버그가 아닌) 버전을 빌드합니다.
솔루션 탐색기에서 프로젝트(솔루션 아님)를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다.
게시 탭에서 게시를 선택합니다. Visual Studio는 애플리케이션을 구성하는 파일을 로컬 파일 시스템에 씁니다.
이제 게시 탭에 단일 프로필인 FolderProfile이 표시됩니다. 프로필의 구성 설정은 탭의 요약 섹션에 표시됩니다.
결과 파일은 프로젝트의
Publish
하위 디렉터리 내에 있는 Windows 시스템의publish
디렉터리 및 Unix 시스템의 디렉터리에 배치됩니다.
게시 프로세스는 애플리케이션의 파일과 함께 앱에 대한 디버깅 정보를 포함하는 프로그램 데이터베이스(.pdb) 파일을 내보냅니다. 이 파일은 주로 예외를 디버깅하는 데 유용합니다. 애플리케이션의 파일로 패키지하지 않도록 선택할 수 있습니다. 그러나 앱의 릴리스 빌드를 디버그하려는 경우에 저장해야 합니다.
원하는 방식으로 전체 애플리케이션 파일 집합을 배포합니다. 예를 들어 Zip 파일로 패키지하거나, 간단한 copy
명령을 사용하거나, 원하는 설치 패키지와 함께 배포할 수 있습니다. 설치되면 사용자는 명령을 사용하고 dotnet
애플리케이션 파일 이름(예: dotnet fdd.dll
.)을 제공하여 애플리케이션을 실행할 수 있습니다.
애플리케이션 바이너리 파일 외에도, 설치 관리자는 공유 프레임워크 설치 관리자를 번들로 묶거나 애플리케이션 설치 시 필수 구성 요소로 확인해야 합니다. 공유 프레임워크를 설치하려면 컴퓨터 수준이므로 관리자/루트 액세스가 필요합니다.
타사 종속성을 사용하는 프레임워크 종속 배포
하나 이상의 타사 종속성을 사용하여 프레임워크 종속 배포를 배포하려면 프로젝트에서 모든 종속성을 사용할 수 있어야 합니다. 앱을 빌드하려면 다음 추가 단계가 필요합니다.
NuGet 패키지 관리자를 사용하여 프로젝트에 NuGet 패키지에 대한 참조를 추가합니다. 시스템에서 패키지를 아직 사용할 수 없는 경우 설치합니다. 패키지 관리자를 열려면 도구>NuGet 패키지 관리자>솔루션용 NuGet 패키지 관리를 선택합니다.
타사 종속성(예
Newtonsoft.Json
: )이 시스템에 설치되어 있는지 확인하고 그렇지 않은 경우 설치합니다. 설치된 탭에는 시스템에 설치된 NuGet 패키지가 나열됩니다. 목록에 없는 경우Newtonsoft.Json
찾아보기 탭을 선택하고 검색 상자에 "Newtonsoft.Json"을 입력합니다. 오른쪽 창에서 프로젝트를 선택하고Newtonsoft.Json
을 선택한 다음, 설치를 선택하십시오.시스템에 이미 설치되어 있는 경우
Newtonsoft.Json
솔루션용 패키지 관리 탭의 오른쪽 창에서 프로젝트를 선택하여 프로젝트에 추가합니다.
타사 종속성이 있는 프레임워크 종속 배포는 타사 종속성만큼 이식 가능합니다. 예를 들어 타사 라이브러리가 macOS만 지원하는 경우 앱은 Windows 시스템으로 이식할 수 없습니다. 이는 타사 종속성 자체가 네이티브 코드에 의존하는 경우에 발생합니다. 이 예제의 좋은 예는 libuv에 대한 네이티브 종속성이 필요한 Kestrel 서버입니다. 이러한 종류의 타사 종속성이 있는 애플리케이션에 대해 FDD를 만들면 게시된 출력에는 네이티브 종속성이 지원하는 RID(런타임 식별자) 및 NuGet 패키지에 있는 각 RID(런타임 식별자 )에 대한 폴더가 포함됩니다.
타사 종속성이 없는 자체 포함 배포
타사 종속성이 없는 자체 포함 배포를 배포하려면 프로젝트를 만들고, csproj 파일을 수정하고, 앱을 빌드, 테스트 및 게시해야 합니다. C#으로 작성된 간단한 예제는 프로세스를 보여 줍니다. 먼저 프레임워크 종속 배포와 마찬가지로 프로젝트를 만들고 코딩하고 테스트합니다.
프로젝트 만들기
파일>새>프로젝트를 선택합니다. 새 프로젝트 대화 상자의 설치된 프로젝트 유형 창에서 언어(C# 또는 Visual Basic) 프로젝트 범주를 확장하고 .NET Core를 선택한 다음 가운데 창에서 콘솔 앱(.NET Core) 템플릿을 선택합니다. 이름 텍스트 상자에 "SCD"와 같은 프로젝트 이름을 입력하고 확인 단추를 선택합니다.
애플리케이션의 소스 코드를 추가합니다.
편집기에서 Program.cs 또는 Program.vb 파일을 열고 자동 생성된 코드를 다음 코드로 바꿉다. 사용자에게 텍스트를 입력하라는 메시지를 표시하고 사용자가 입력한 개별 단어를 표시합니다. 정규식을
\w+
사용하여 입력 텍스트의 단어를 구분합니다.using System; using System.Text.RegularExpressions; namespace Applications.ConsoleApps { public class ConsoleParser { public static void Main() { Console.WriteLine("Enter any text, followed by <Enter>:\n"); String? s = Console.ReadLine(); ShowWords(s ?? "You didn't enter anything."); Console.Write("\nPress any key to continue... "); Console.ReadKey(); } private static void ShowWords(String s) { String pattern = @"\w+"; var matches = Regex.Matches(s, pattern); if (matches.Count == 0) { Console.WriteLine("\nNo words were identified in your input."); } else { Console.WriteLine($"\nThere are {matches.Count} words in your string:"); for (int ctr = 0; ctr < matches.Count; ctr++) { Console.WriteLine($" #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}"); } } } } }
Imports System.Text.RegularExpressions Namespace Applications.ConsoleApps Public Module ConsoleParser Public Sub Main() Console.WriteLine("Enter any text, followed by <Enter>:") Console.WriteLine() Dim s = Console.ReadLine() ShowWords(s) Console.Write($"{vbCrLf}Press any key to continue... ") Console.ReadKey() End Sub Private Sub ShowWords(s As String) Dim pattern = "\w+" Dim matches = Regex.Matches(s, pattern) Console.WriteLine() If matches.Count = 0 Then Console.WriteLine("No words were identified in your input.") Else Console.WriteLine($"There are {matches.Count} words in your string:") For ctr = 0 To matches.Count - 1 Console.WriteLine($" #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}") Next End If Console.WriteLine() End Sub End Module End Namespace
세계화 불변 모드를 사용할지 여부를 결정합니다.
특히 앱이 Linux를 대상으로 하는 경우 세계화 고정 모드를 활용하여 배포의 총 크기를 줄일 수 있습니다. 세계화 불변 모드는 전역적으로 인식하지 않고 형식 지정 관습, 대/소문자 사용법, 문자열 비교 및 불변 문화권의 정렬 순서를 사용할 수 있는 애플리케이션에 유용합니다.
고정 모드를 사용하도록 설정하려면 솔루션 탐색기에서 프로젝트(솔루션 아님)를 마우스 오른쪽 단추로 클릭하고 SCD.csproj 편집 또는 SCD.vbproj 편집을 선택합니다. 그런 다음, 강조 표시된 다음 줄을 파일에 추가합니다.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" /> </ItemGroup> </Project>
애플리케이션의 디버그 빌드를 만듭니다.
빌드 솔루션 빌드>를 선택합니다. 디버그시작 디버깅을 선택하여 애플리케이션의 > 빌드를 컴파일하고 실행할 수도 있습니다. 이 디버깅 단계를 사용하면 호스트 플랫폼에서 실행 중인 애플리케이션의 문제를 식별할 수 있습니다. 여전히 각 대상 플랫폼에서 테스트해야 합니다.
세계화 고정 모드를 사용하도록 설정한 경우 특히 문화권에 민감한 데이터가 없는 것이 애플리케이션에 적합한지 테스트해야 합니다.
디버깅을 완료하면 자체 포함 배포를 게시할 수 있습니다.
프로그램을 디버그하고 테스트한 후 대상으로 하는 각 플랫폼에 대해 앱과 함께 배포할 파일을 만듭니다.
Visual Studio에서 앱을 게시하려면 다음을 수행합니다.
앱이 대상으로 하는 플랫폼을 정의합니다.
솔루션 탐색기에서 프로젝트(솔루션 아님)를 마우스 오른쪽 단추로 클릭하고 SCD.csproj 편집을 선택합니다.
앱이
<RuntimeIdentifiers>
대상으로 하는<PropertyGroup>
플랫폼을 정의하는 csproj 파일 섹션에 태그를 만들고 대상으로 하는 각 플랫폼의 RID(런타임 식별자)를 지정합니다. 또한 RID를 구분하기 위해 세미콜론을 추가해야 합니다. 런타임 식별자 목록은 런타임 식별자 카탈로그를 참조하세요.
예를 들어 다음 예제에서는 앱이 64비트 Windows 운영 체제 및 64비트 OS X 운영 체제에서 실행되고 있음을 나타냅니다.
<PropertyGroup> <RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers> </PropertyGroup>
<RuntimeIdentifiers>
요소는 사용자의<PropertyGroup>
파일에 포함된 모든 에 들어갈 수 있습니다. 전체 샘플 csproj 파일은 이 섹션의 뒷부분에 나타납니다.앱을 게시합니다.
프로그램을 디버그하고 테스트한 후 대상으로 하는 각 플랫폼에 대해 앱과 함께 배포할 파일을 만듭니다.
Visual Studio에서 앱을 게시하려면 다음을 수행합니다.
솔루션 구성을 도구 모음의 디버그 에서 릴리스 로 변경하여 앱의 릴리스(디버그가 아닌) 버전을 빌드합니다.
솔루션 탐색기에서 프로젝트(솔루션 아님)를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다.
게시 탭에서 게시를 선택합니다. Visual Studio는 애플리케이션을 구성하는 파일을 로컬 파일 시스템에 씁니다.
이제 게시 탭에 단일 프로필인 FolderProfile이 표시됩니다. 프로필의 구성 설정은 탭의 요약 섹션에 표시됩니다. 대상 런타임 은 게시된 런타임을 식별하고 대상 위치 는 자체 포함 배포에 대한 파일이 작성된 위치를 식별합니다.
Visual Studio는 기본적으로 게시된 모든 파일을 단일 디렉터리에 씁니다. 편의를 위해 각 대상 런타임에 대해 별도의 프로필을 만들고 게시된 파일을 플랫폼별 디렉터리에 배치하는 것이 가장 좋습니다. 여기에는 각 대상 플랫폼에 대해 별도의 게시 프로필을 만드는 작업이 포함됩니다. 이제 다음을 수행하여 각 플랫폼에 대한 애플리케이션을 다시 빌드합니다.
게시 대화 상자에서 새 프로필 만들기를 선택합니다.
게시 대상 선택 대화 상자에서 폴더 선택 위치를 bin\Release\PublishOutput\win-x64로 변경합니다. 확인을 선택합니다.
프로필 목록에서 새 프로필(FolderProfile1)을 선택하고 대상 런타임
win-x64
이 있는지 확인합니다. 그렇지 않은 경우 설정을 선택합니다. 프로필 설정 대화 상자에서 대상 런타임을 변경하고win-x64
을 선택합니다. 그렇지 않으면 취소를 선택합니다.게시를 선택하여 64비트 Windows 10 플랫폼용 앱을 게시합니다.
이전 단계를 다시 수행하여 플랫폼에 대한 프로필을 만듭니다
osx-x64
. 대상 위치는 bin\Release\PublishOutput\osx-x64이고 대상 런타임은osx-x64
. Visual Studio에서 이 프로필에 할당하는 이름은 FolderProfile2입니다.
각 대상 위치에는 앱을 시작하는 데 필요한 전체 파일 집합(앱 파일 및 모든 .NET Core 파일)이 포함됩니다.
게시 프로세스는 애플리케이션의 파일과 함께 앱에 대한 디버깅 정보를 포함하는 프로그램 데이터베이스(.pdb) 파일을 내보냅니다. 이 파일은 주로 예외를 디버깅하는 데 유용합니다. 애플리케이션의 파일로 패키지하지 않도록 선택할 수 있습니다. 그러나 앱의 릴리스 빌드를 디버그하려는 경우에 저장해야 합니다.
원하는 방식으로 게시된 파일을 배포합니다. 예를 들어 Zip 파일로 패키지하거나, 간단한 copy
명령을 사용하거나, 원하는 설치 패키지와 함께 배포할 수 있습니다.
다음은 이 프로젝트에 대한 전체 csproj 파일입니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
</Project>
자체 포함 배포 및 타사 종속성
하나 이상의 타사 종속성을 사용하여 자체 포함 배포를 배포하려면 종속성을 추가해야 합니다. 앱을 빌드하려면 다음 추가 단계가 필요합니다.
NuGet 패키지 관리자를 사용하여 프로젝트에 NuGet 패키지에 대한 참조를 추가합니다. 시스템에서 패키지를 아직 사용할 수 없는 경우 설치합니다. 패키지 관리자를 열려면 도구>NuGet 패키지 관리자>솔루션용 NuGet 패키지 관리를 선택합니다.
타사 종속성(예
Newtonsoft.Json
: )이 시스템에 설치되어 있는지 확인하고 그렇지 않은 경우 설치합니다. 설치된 탭에는 시스템에 설치된 NuGet 패키지가 나열됩니다. 목록에 없는 경우Newtonsoft.Json
찾아보기 탭을 선택하고 검색 상자에 "Newtonsoft.Json"을 입력합니다. 오른쪽 창에서 프로젝트를 선택하고Newtonsoft.Json
을 선택한 다음, 설치를 선택하십시오.시스템에 이미 설치되어 있는 경우
Newtonsoft.Json
솔루션용 패키지 관리 탭의 오른쪽 창에서 프로젝트를 선택하여 프로젝트에 추가합니다.
다음은 이 프로젝트에 대한 전체 csproj 파일입니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
</ItemGroup>
</Project>
애플리케이션을 배포할 때 앱에 사용되는 타사 종속성도 애플리케이션 파일과 함께 포함됩니다. 타사 라이브러리는 앱이 실행되는 시스템에 필요하지 않습니다.
타사 라이브러리가 있는 자체 포함 배포만 해당 라이브러리에서 지원하는 플랫폼에 배포할 수 있습니다. 이는 프레임워크 종속 배포에서 네이티브 종속성이 있는 타사 종속성을 갖는 것과 유사합니다. 여기서 네이티브 종속성은 이전에 설치되지 않은 한 대상 플랫폼에 존재하지 않습니다.
참고하십시오
- .NET Core 애플리케이션 배포
- .NET Core RID(런타임 식별자) 카탈로그
.NET