Al.exe(어셈블리 링커)
업데이트: 2011년 4월
어셈블리 링커는 모듈 또는 리소스 파일인 하나 이상의 파일에서 어셈블리 매니페스트가 있는 파일을 생성합니다. 모듈이란 어셈블리 매니페스트가 없는 MSIL(Microsoft Intermediate Language) 파일입니다.
참고 |
---|
어셈블리가 Windows Vista 컴퓨터에서 가상화되지 않게 하려면 요청되는 실행 수준을 지정하는 win32 매니페스트가 어셈블리에 포함되어야 합니다.명령줄에서 al.exe를 직접 사용할 때는 매니페스트를 win32 리소스 파일에 포함할 수도 있고 mt.exe를 사용하여 빌드 프로세스의 이후 단계에서 매니페스트를 추가할 수도 있습니다.Visual Studio 2008에서는 C# 및 Visual Basic 컴파일러가 모두 win32 매니페스트를 어셈블리에 자동으로 포함시킵니다.자세한 내용은 /win32manifest(C# 컴파일러 옵션)을 참조하십시오. |
이 도구는 Visual Studio 및 Windows SDK와 함께 자동으로 설치됩니다. 도구를 실행하려면 Visual Studio 명령 프롬프트 또는 Windows SDK 명령 프롬프트(CMD 셸)를 사용하는 것이 좋습니다. 이러한 유틸리티를 사용하면 설치 폴더를 탐색하지 않고도 도구를 쉽게 실행할 수 있습니다. 자세한 내용은 Visual Studio 및 Windows SDK 명령 프롬프트을 참조하십시오.
컴퓨터에 Visual Studio를 설치한 경우 작업 표시줄에서 Start, All Programs, Visual Studio, Visual Studio Tools 및 Visual Studio Command Prompt를 차례로 클릭합니다.
또는
컴퓨터에 Windows SDK를 설치한 경우 작업 표시줄에서 Start, All Programs 및 Windows SDK의 폴더를 차례로 클릭한 다음 Command Prompt(또는 CMD Shell)를 클릭합니다.
명령 프롬프트에 다음과 같이 입력합니다.
al sources options
매개 변수
다음 sources 중에서 하나 이상 지정할 수 있습니다.
소스 |
설명 |
---|---|
file[,target] |
file(모듈)의 내용을 target이 지정하는 파일 이름에 복사합니다. 복사한 후 Al.exe가 target을 어셈블리로 컴파일합니다. |
/embed[resource]:file[,name[,private]] |
file이 지정하는 리소스를 어셈블리 매니페스트가 포함된 이미지에 포함시킵니다. Al.exe는 file의 내용을 이식 가능한 실행 파일(PE) 이미지에 복사합니다. name 매개 변수는 리소스의 내부 식별자입니다. 기본적으로 리소스는 어셈블리에서 공용입니다. 즉, 다른 어셈블리가 볼 수 있습니다. private를 지정하면 다른 어셈블리에서 리소스를 볼 수 없습니다. 예를 들어, file이 리소스 파일 생성기(Resgen.exe)나 개발 환경에서 만들어진 .NET Framework 리소스 파일인 경우에는 System.Resources의 멤버를 사용하여 해당 파일에 액세스할 수 있습니다. 자세한 내용은 ResourceManager을 참조하십시오. 다른 모든 리소스의 경우에는 런타임에 Assembly의 GetManifestResource* 메서드를 사용하여 리소스에 액세스합니다. 리소스 파일만 Al.exe에 전달되는 경우에는 출력 파일이 위성 리소스 어셈블리입니다. |
/link[resource]:file[,name[,target[,private]]] |
리소스 파일을 어셈블리에 링크합니다. file이 지정하는 리소스가 어셈블리의 일부가 되고 파일은 복사되지 않습니다. file 매개 변수는 어떠한 파일 형식도 될 수 있습니다. 예를 들어, 네이티브 DLL을 file 매개 변수로 지정할 수 있습니다. 이렇게 하면 네이티브 DLL이 어셈블리의 일부가 되므로 전역 어셈블리 캐시에 설치하고 어셈블리의 관리 코드에서 액세스할 수 있습니다. 또한 /linkresource 컴파일러 옵션을 사용하여 이 작업을 수행할 수도 있습니다. 자세한 내용은 /linkresource(C# 컴파일러 옵션)을 참조하십시오. name 매개 변수는 리소스의 내부 식별자입니다. target 매개 변수는 Al.exe가 file을 복사하는 경로와 파일 이름을 지정합니다. 복사한 후 Al.exe가 target을 어셈블리로 컴파일합니다. 기본적으로 리소스는 어셈블리에서 공용입니다. 즉, 다른 어셈블리가 볼 수 있습니다. private를 지정하면 다른 어셈블리에서 리소스를 볼 수 없습니다. 예를 들어, file이 리소스 파일 생성기(Resgen.exe)나 개발 환경에서 만들어진 .NET Framework 리소스 파일인 경우에는 System.Resources 네임스페이스의 멤버를 사용하여 해당 파일에 액세스할 수 있습니다. 자세한 내용은 ResourceManager을 참조하십시오. 다른 모든 리소스의 경우에는 런타임에 Assembly 클래스의 GetManifestResource* 메서드를 사용하여 리소스에 액세스합니다. 리소스 파일만 Al.exe에 전달되는 경우에는 출력 파일이 위성 리소스 어셈블리입니다. |
다음 options를 지정할 수 있으며, /out은 반드시 지정해야 합니다.
Option |
설명 |
---|---|
/algid:id |
어셈블리 매니페스트가 포함된 파일을 제외하고 다중 파일 어셈블리에 있는 모든 파일을 해시하는 알고리즘을 지정합니다. 기본 알고리즘은 CALG_SHA1입니다. 다른 알고리즘에 대해서는 Platform SDK 설명서의 ALG_ID를 참조하십시오. .NET Framework의 첫 릴리스에서는 CALG_SHA1과 CALG_MD5만 유효합니다. 해시 값은 어셈블리 매니페스트의 파일 테이블에 저장됩니다. 설치 및 로드할 때 어셈블리의 파일을 해시와 비교하여 확인합니다. 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyAlgorithmIdAttribute)으로 지정할 수도 있습니다. |
/base[address]:addr |
런타임에 DLL이 사용자의 컴퓨터에 로드되는 주소를 지정합니다. 운영 체제가 프로세스 공간에서 DLL을 재배치하게 하지 않고 DLL의 기본 주소를 직접 지정하면 응용 프로그램의 로드 속도가 빨라집니다. |
/bugreport:filename |
버그를 보고하기 위한 정보가 포함된 파일(filename)을 만듭니다. |
/comp[any]:text |
어셈블리의 Company 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 text가 Microsoft Windows 탐색기에서 파일의 Company 속성으로 나타납니다. /win32res를 지정하면 지정된 리소스 파일의 회사 정보가 Windows 탐색기에서 Company 속성으로 나타납니다. 텍스트가 빈 문자열("")이면 Win32 Company 리소스가 단일 공백으로 표시됩니다. /win32res를 지정하면 /company가 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyCompanyAttribute)으로 지정할 수도 있습니다. |
/config[uration]:text |
어셈블리의 Configuration 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. 텍스트가 빈 문자열이면 Win32 Configuration 리소스가 단일 공백으로 표시됩니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyConfigurationAttribute)으로 지정할 수도 있습니다. |
/copy[right]:text |
어셈블리의 Copyright 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /copyright가 Windows 탐색기에서 Win32 Copyright 리소스로 나타납니다. 텍스트가 빈 문자열이면 Win32 Copyright 리소스가 단일 공백으로 표시됩니다. /win32res를 지정하면 /copyright가 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyCopyrightAttribute)으로 지정할 수도 있습니다. |
/c[ulture]:text |
어셈블리에 연결할 culture 문자열을 지정합니다. "Tags for the Identification of Languages"라는 제목의 인터넷 RFC(Requests for Comments) 문서 1766에서 정의하는 값이 문화권의 유효한 값입니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 기본 문화권 문자열은 없습니다. 이 문자열을 리플렉션과 함께 볼 수 있습니다. 유효한 text 문자열에 대한 자세한 내용은 CultureInfo를 참조하십시오. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyCultureAttribute)으로 지정할 수도 있습니다. |
/delay[sign][+|-] |
어셈블리를 완전히 서명할지, 아니면 부분적으로 서명할지를 지정합니다. 어셈블리에 완전히 서명하려면 /delaysign-를 사용하고 어셈블리에 공개 키만 포함하려면 /delaysign+를 사용합니다. 완전히 서명된 어셈블리를 요청할 경우 Al.exe는 매니페스트(어셈블리 메타데이터)가 포함된 파일을 해시하고 공개 키로 해당 해시에 서명합니다. 결과로 생성되는 디지털 서명은 매니페스트가 포함된 파일에 저장됩니다. 어셈블리 서명이 연기된 경우 Al.exe는 서명을 계산하거나 저장하지 않고 나중에 서명을 추가할 수 있도록 파일에 공간을 예약합니다. 기본값은 /delaysign-입니다. /delaysign 옵션은 /keyfile 또는 /keyname와 함께 사용할 경우에만 효과를 나타냅니다. 예를 들어, /delaysign+를 사용하면 테스터가 어셈블리를 전역 캐시에 넣을 수 있습니다. 테스트를 마친 후 어셈블리에 개인 키를 포함하여 어셈블리에 완전히 서명할 수 있습니다.
참고
서명이 연기된 어셈블리를 전역 캐시에 넣기 위해 Gacutil.exe(전역 어셈블리 캐시 도구)를 사용하려면 먼저 Sn.exe(강력한 이름 도구)를 사용하여 어셈블리를 등록해 확인을 건너뜁니다.예를 들어, Sn.exe –Vr delaySignedAssembly을 입력합니다.개발에서만 이 기능을 사용하십시오.
MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyDelaySignAttribute)으로 지정할 수도 있습니다. |
/descr[iption]:text |
어셈블리의 Description 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /description이 Windows 탐색기에서 Win32 Comments 리소스로 나타납니다. 텍스트가 빈 문자열이면 Win32 Comments 리소스가 단일 공간으로 나타납니다. /win32res를 지정하면 /description이 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(Description)으로 지정할 수도 있습니다. |
/e[vidence]:file |
어셈블리에 file을 Security.Evidence라는 리소스 이름으로 포함시킵니다. 기본 리소스에는 Security.Evidence를 사용할 수 없습니다. |
/fileversion:version |
어셈블리의 File Version 필드에 대한 문자열을 지정합니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /fileversion이 Win32 File Version 리소스로 사용됩니다. /fileversion을 지정하지 않으면 Win32 File Version 리소스가 Win32 Assembly Version 리소스로 채워집니다. /win32res가 지정되면 /fileversion이 Win32 리소스에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyFileVersionAttribute)으로 지정할 수도 있습니다. |
/flags:flags |
어셈블리의 Flags 필드에 대한 값을 지정합니다. flags에 사용할 수 있는 값은 다음과 같습니다.
MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyFlagsAttribute)으로 지정할 수도 있습니다. |
/fullpaths |
오류 메시지에 보고되는 파일에 대해 Al.exe가 절대 경로를 사용합니다. |
/help |
이 도구의 명령 구문 및 옵션을 표시합니다. |
/keyf[ile]:filename |
어셈블리에 서명하기 위한 키 쌍 또는 공개 키를 포함하는 파일(filename)을 지정합니다. 컴파일러는 공개 키를 어셈블리 매니페스트에 삽입한 다음 개인 키를 사용하여 최종 어셈블리에 서명합니다. 키 파일을 생성하고 키 쌍을 키 컨테이너에 설치하는 방법에 대한 자세한 내용은 강력한 이름 도구(Sn.exe)를 참조하십시오. 연기된 서명을 사용할 경우 이 파일에는 일반적으로 공개 키가 있으며 개인 키는 없습니다. 키 쌍의 공개 키 정보는 어셈블리의 .publickey 필드에 나타납니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyKeyFileAttribute)으로 지정할 수도 있습니다. 명령줄 옵션이나 사용자 지정 특성을 사용하여 동일한 컴파일에서 /keyfile 및 /keyname을 모두 지정하면 Al.exe는 먼저 /keyname으로 지정된 컨테이너를 찾으려고 합니다. 이 시도에 성공하면 키 컨테이너의 정보를 사용하여 어셈블리가 서명됩니다. Al.exe는 키 컨테이너를 찾지 못하면 /keyfile로 지정된 파일을 찾으려고 합니다. 해당 파일을 찾으면 어셈블리는 키 파일의 정보로 서명되고 이 키 정보는 키 컨테이너에 설치되므로(Sn.exe의 -i 옵션과 유사) 다음에 컴파일할 때 /keyname 옵션이 유효해집니다. |
/keyn[ame]:text |
키 쌍을 보관하는 컨테이너를 지정합니다. 어셈블리 매니페스트에 공개 키를 삽입하여 어셈블리에 서명(강력한 이름을 부여)합니다. 그런 다음 Al.exe가 개인 키를 사용하여 최종 어셈블리에 서명합니다. Sn.exe를 사용하여 키 쌍을 생성합니다. 어셈블리의 .publickey 필드에 키 정보가 나타납니다. text에 공백이 있으면 큰따옴표(" ")로 묶습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyKeyNameAttribute)으로 지정할 수도 있습니다. |
/main:method |
모듈을 실행 파일로 변환할 때 진입점으로 사용할 메서드의 정규화된 이름(class.method)을 지정합니다. |
/nologo |
Al.exe를 실행할 때 명령줄에 표시되는 배너 또는 로고를 표시하지 않습니다. |
/out:filename |
Al.exe가 생성한 파일의 이름을 지정합니다. 필수 옵션입니다. |
/platform:text |
이 코드를 실행할 수 있는 플랫폼은 x86, Itanium, x64 또는 anycpu(기본값)로 제한됩니다. |
/prod[uct]:text |
어셈블리의 Product 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /product가 Windows 탐색기에서 Win32 Product Name 리소스로 나타납니다. 텍스트가 빈 문자열이면 Win32 Product Name 리소스가 단일 공간으로 나타납니다. /win32res를 지정하면 /product가 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyProductAttribute)으로 지정할 수도 있습니다. |
/productv[ersion]:text |
어셈블리의 Product Version 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /productversion이 Win32 Product Version 리소스로 사용됩니다. /productversion을 지정하지 않으면 Win32 Product Version 리소스가 Win32 File Version 리소스로 채워집니다. /win32res를 지정하면 /productversion이 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyInformationalVersionAttribute)으로 지정할 수도 있습니다. |
/t[arget]:lib[rary] | exe | win[exe] |
출력 파일의 형식을 lib[rary](코드 라이브러리), exe(콘솔 응용 프로그램) 또는 win[exe](Windows 기반 응용 프로그램)으로 지정합니다. 기본값은 lib[rary]입니다. |
/template:filename |
culture 필드를 제외한 모든 어셈블리 메타데이터를 상속받을 상위 어셈블리, filename을 지정합니다. /template을 사용하여 만든 어셈블리는 위성 어셈블리입니다. |
/title:text |
어셈블리의 Title 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /title이 Windows 탐색기에서 Win32 Description 리소스로 나타나며 이 리소스는 셸에서 응용 프로그램의 이름으로 사용됩니다. 파일 형식을 지원하는 응용 프로그램이 여러 개인 경우는 바로 가기 메뉴의 연결 프로그램 하위 메뉴에도 표시됩니다. 텍스트가 빈 문자열이면 Win32 Description 리소스가 단일 공간으로 나타납니다. /win32res를 지정하면 /title이 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyTitleAttribute)으로 지정할 수도 있습니다. |
/trade[mark]:text |
어셈블리의 Trademark 필드에 대한 문자열을 지정합니다. text에 공백이 있으면 문자열을 큰따옴표(" ")로 묶습니다. 이 문자열은 어셈블리의 사용자 지정 속성이며 리플렉션과 함께 볼 수 있습니다. /win32res를 지정하지 않으면 /trademark가 Windows 탐색기에서 Win32 Trademark 리소스로 나타납니다. 텍스트가 빈 문자열이면 Win32 Trademark 리소스가 단일 공간으로 나타납니다. /win32res를 지정하면 /trademark가 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyTrademarkAttribute)으로 지정할 수도 있습니다. |
/v[ersion]:version |
이 어셈블리의 버전 정보를 지정합니다. 버전 문자열의 형식은 major.minor.build.revision입니다. 기본값은 0입니다. /version을 지정하면 major도 지정해야 합니다. major 및 minor를 지정하면 build에 대해 별표(*)를 지정할 수 있습니다. 이 경우 build는 현지 시간 2000년 1월 1일부터 경과된 일수와 일치하며, revision은 현재 날짜, 현지 시간, 자정부터 경과된 초 수를 2로 나눈 값과 일치합니다. major, minor 및 build를 지정하면 revision에 대해 별표(*)를 지정할 수 있습니다. 이 경우 revision은 현재 날짜, 현지 시간, 자정부터 경과된 초 수를 2로 나눈 값과 일치합니다. 유효한 버전 문자열을 요약하면 다음과 같습니다. X X.X X.X.* X.X.X X.X.X.* X.X.X.X 여기서 X는 65535를 제외한 부호 없는 short 상수(0-65534)입니다. /win32res를 지정하지 않으면 /version이 Win32 Assembly Version 리소스로 사용됩니다. /win32res, /productversion 및 /fileversion을 지정하지 않으면 /version은 Assembly Version, 파일 버전 및 Product Version Win32 리소스에 사용됩니다. /win32res를 지정하면 /version이 Win32 리소스 정보에 영향을 주지 않습니다. MSIL 모듈의 소스 코드에서 이 옵션을 사용자 지정 특성(AssemblyVersionAttribute)으로 지정할 수도 있습니다. |
/win32icon:filename |
.ico 파일을 어셈블리에 삽입합니다. .ico 파일을 사용하면 Windows 탐색기에서 출력 파일이 원하는 모양으로 나타납니다. |
/win32res:filename |
Win32 리소스(.res 파일)를 출력 파일에 삽입합니다. Win32 리소스 파일은 리소스 컴파일러를 사용하여 만듭니다. 리소스 컴파일러는 Visual C++ 프로그램을 컴파일할 때 실행되며 .rc 파일에서 .res 파일이 만들어집니다. |
@filename |
Al.exe 명령을 포함하는 지시 파일을 지정합니다. 지시 파일의 명령은 한 줄에 하나씩 나타나거나 하나 이상의 공백으로 분리되어 같은 줄에 나타날 수 있습니다. |
/? |
이 도구의 명령 구문 및 옵션을 표시합니다. |
설명
모든 Visual Studio 컴파일러는 어셈블리를 만듭니다. 그러나 모듈(매니페스트 없는 메타데이터)이 하나 이상 있으면 Al.exe를 사용하여 별도의 파일에 매니페스트가 있는 어셈블리를 만들 수 있습니다.
어셈블리를 캐시에 설치하거나, 캐시에서 어셈블리를 제거하거나, 캐시의 내용을 나열하려면 전역 어셈블리 캐시 도구(Gacutil.exe)를 사용 하십시오.
예제
다음 명령은 t2.netmodule 모듈의 어셈블리를 사용하여 실행 파일 t2a.exe를 만듭니다. 진입점은 MyClass의 Main 메서드입니다.
al t2.netmodule /target:exe /out:t2a.exe /main:MyClass.Main
참고 항목
작업
방법: MSTest를 사용하여 명령줄에서 자동화된 테스트 실행
참조
Visual Studio 및 Windows SDK 명령 프롬프트
기타 리소스
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2011년 4월 |
Visual Studio 및 Windows SDK 명령 프롬프트 사용에 대한 정보를 추가했습니다. |
향상된 기능 관련 정보 |