방법: 강력한 이름으로 어셈블리에 서명

참고 항목

.NET Core가 강력한 이름의 어셈블리를 지원하고 .NET Core 라이브러리의 모든 어셈블리는 서명되어 있지만 대부분의 타사 어셈블리에는 강력한 이름이 필요하지 않습니다. 자세한 내용은 GitHub의 강력한 이름 서명을 참조하세요.

강력한 이름으로 어셈블리에 서명하는 여러 가지 방법이 있습니다.

  • Visual Studio의 프로젝트에서 프로젝트 디자이너빌드>강력한 명명 페이지를 사용합니다. 이는 가장 쉽고 편리하게 강력한 이름으로 어셈블리에 서명하는 방법입니다.
  • 어셈블리 링커(Al.exe)를 사용하여 .NET Framework 코드 모듈(.netmodule 파일)을 키 파일과 연결하는 방법.
  • 어셈블리 특성을 사용하여 강력한 이름 정보를 코드에 삽입하는 방법. 사용할 키 파일의 위치에 따라 AssemblyKeyFileAttribute 또는 AssemblyKeyNameAttribute 특성을 사용할 수 있습니다.
  • 컴파일러 옵션을 사용하는 방법.

강력한 이름으로 어셈블리를 서명하려면 암호화 키 쌍이 있어야 합니다. 키 쌍을 만드는 방법에 대한 자세한 내용은 방법: 프라이빗-퍼블릭 키 쌍 만들기를 참조하세요.

Visual Studio를 사용하여 강력한 이름으로 어셈블리를 만들고 서명

  1. 솔루션 탐색기에서 프로젝트의 바로 가기 메뉴를 열고 속성을 선택합니다.
  2. 빌드 탭에 강력한 명명 노드가 있습니다.
  3. 어셈블리 서명 확인란을 선택하여 옵션을 확장합니다.
  4. 찾아보기 단추를 선택하여 강력한 이름 키 파일 경로를 선택합니다.

참고 항목

어셈블리를 지연 서명하기 위해 공개 키 파일을 선택합니다.

Visual Studio 2022: Project properties, Build / Strong naming section.

어셈블리 링커를 사용하여 강력한 이름으로 어셈블리를 만들고 서명

Visual Studio 개발자 명령 프롬프트나 Visual Studio 개발자 PowerShell을 열고 다음 명령을 입력합니다.

al/out:<assemblyName><moduleName>/keyfile:<keyfileName>

여기서

  • assemblyName은 어셈블리 링커가 내보낼 강력하게 서명된 어셈블리(.dll 또는.exe 파일)의 이름입니다.
  • moduleName은 하나 이상의 형식을 포함하는 .NET Framework 코드 모듈(.netmodule 파일)의 이름입니다. C# 또는 Visual Basic에서 /target:module 스위치로 코드를 컴파일하여 .netmodule 파일을 만들 수 있습니다.
  • keyfileName은 키 쌍을 포함하는 컨테이너 또는 파일의 이름입니다. 어셈블리 링커는 현재 디렉터리를 기준으로 상대 경로를 해석합니다.

다음 예제에서는 키 쌍 파일 sgKey.snk를 사용하여 강력한 이름으로 MyAssembly.dll 어셈블리에 서명합니다.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

이 도구에 대한 자세한 내용은 어셈블리 링커를 참조하십시오.

특성을 사용하여 강력한 이름으로 어셈블리 서명

  1. System.Reflection.AssemblyKeyFileAttribute 또는 AssemblyKeyNameAttribute 특성을 소스 코드 모듈에 추가하고, 강력한 이름으로 어셈블리를 서명할 때 사용할 키 쌍이 포함된 컨테이너 또는 파일의 이름을 지정합니다.

  2. 소스 코드 파일을 정상적으로 컴파일합니다.

    참고 항목

    C# 및 Visual Basic 컴파일러에서는 소스 코드에 AssemblyKeyFileAttribute 또는 AssemblyKeyNameAttribute 특성이 나올 때 컴파일러 경고(각각 CS1699 및 BC41008)를 발생시킵니다. 이런 경고는 무시할 수 있습니다.

다음 예제에서는 어셈블리가 컴파일된 디렉터리에 있는 keyfile.snk라는 키 파일과 함께 AssemblyKeyFileAttribute 특성을 사용합니다.

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

또한, 소스 파일을 컴파일할 때 어셈블리 서명을 연기할 수 있습니다. 자세한 내용은 어셈블리 지연 서명을 참조하세요.

컴파일러를 사용하여 강력한 이름으로 어셈블리 서명

C# 및 Visual Basic 컴파일러에서 /keyfile 또는 /delaysign 컴파일러 옵션을 사용하거나 C++에서 /KEYFILE 또는 /DELAYSIGN 링커 옵션을 사용하여 소스 코드 파일을 컴파일합니다. 옵션 이름 다음에 콜론과 키 파일의 이름을 추가합니다. 명령줄 컴파일러를 사용할 때, 소스 코드 파일이 포함된 디렉터리에 키 파일을 복사할 수 있습니다.

지연 서명에 대한 자세한 내용은 어셈블리 지연 서명을 참조하세요.

다음 예제에서는 C# 컴파일러를 사용하고 키 파일 sgKey.snk를 사용하여 강력한 이름으로 UtilityLibrary.dll 어셈블리에 서명합니다.

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

참고 항목