csc 명령을 사용하여 .cs 파일을 .dll로 컴파일하는 프로세스
.cs 파일을 .dll 파일로 별도로 컴파일해야 하는 경우가 많습니다. 작업은 다음과 같습니다.
명령 창 열기->콘솔에 cmd 입력->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322
vs.net이 설치된 디렉터리로 이동 -> csc 명령 실행 csc /target:library File.cs -> 해당 디렉터리에 해당 이름의 .dll 파일 생성(전제 조건: .cs 파일을 C:에 넣기) WINDOWS Microsoft.NETFrameworkv1.1.4322 디렉터리)
csc 명령을 사용하는 방법은 여러 가지가 있습니다. 다음을 참조하십시오.
File.cs를 변환하여 File.exe 생성
csc File.cs는 File.cs를 컴파일하여 File.dll을 생성합니다.
csc /target:library File.cs File.cs 컴파일 및 My.exe 생성
csc /out:My.exe File.cs 최적화 및 DEBUG 기호 정의를 사용하여 현재 디렉터리의 모든 C# 파일을 컴파일합니다. 출력은 File2.exe입니다.
csc /define:DEBUG /optimize /out:File2.exe *.cs 현재 디렉터리의 모든 C# 파일을 컴파일하여 File2.dll의 디버그 버전을 생성합니다. 로고나 경고를 표시하지 마세요.
csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs 현재 디렉터리의 모든 C# 파일을 Something.xyz(DLL)로 컴파일합니다.
csc /target:library /out:Something.xyz *.cs File.cs를 컴파일하여 File.dll 생성
csc /target:library File.cs는 가장 일반적으로 사용되는 명령입니다. 실제로 csc /t:library File.cs로 간단히 작성할 수 있습니다. csc /out:mycodebehind.dll /t:library입니다. mycodebehind.cs 에서 출력 파일 이름을 직접 지정할 수 있습니다.
csc /out:mycodebehind.dll /t:library mycodebehind.cs mycodebehind2.cs, 이 기능은 두 개의 cs 파일을 하나의 .dll 파일에 설치하는 것입니다.
예(인터넷에서 발췌)
1. 동적 링크 라이브러리
동적 링크 라이브러리란 무엇입니까? 세 글자 DLL은 여러분에게 익숙할 것입니다. Dynamic Link Library(동적 링크 라이브러리)는 공유 함수 라이브러리인 실행 파일입니다. 동적 연결은 프로세스가 실행 코드의 일부가 아닌 함수를 호출하는 방법을 제공합니다. 함수의 실행 코드는 이를 사용하는 프로세스와 별도로 컴파일, 링크 및 저장된 하나 이상의 함수를 포함하는 DLL에 있습니다. DLL은 데이터와 리소스를 공유하는 데도 도움이 됩니다. 여러 응용 프로그램이 메모리에 있는 단일 DLL 복사본의 내용에 동시에 액세스할 수 있습니다.
대부분의 프로그래머와 마찬가지로 DLL을 자주 사용해 본 적이 있을 것입니다. 프로그래밍과 코딩 시 좋은 실수가 발생한다고 느낀 적이 있습니까? 오늘 저는 C#에서 DLL(동적 링크 라이브러리)을 만들고 호출하는 방법에 대해 논의하고 싶습니다. 실제로 DLL은 큰 의미에서 허용됩니다. 소프트웨어 디자이너로서 애플리케이션을 보다 유연하게 구성하고 작성하면 이를 기반으로 높은 코드 재사용 효과를 얻을 수 있습니다. C#에서 DLL을 생성하고 호출하는 방법을 소개하겠습니다.
2. 준비작업
다음에 수행할 작업에 대해 간략하게 소개해야 합니다. 이 기사에서는 C# 언어를 사용하여 MyDLL.DLL이라는 동적 링크 라이브러리를 만들 것입니다. 하나는 다음과 같습니다. 두 매개변수의 값을 교환하는 또 다른 기능은 두 매개변수의 최대 공약수를 찾는 것입니다. 그런 다음 이 DLL을 사용할 애플리케이션을 만듭니다. 실행하고 결과를 출력합니다.
3. DLL 생성
다음 세 가지 C# 코드 파일을 만들어 보겠습니다.
1. MySwap.cs
}
시스템 사용;
네임스페이스 MyMethods
{
공개 클래스 SwapClass
{
공개 정적 bool Swap(ref long i,ref long j)
{
나는 = i+j;
j = ij;
나는 = ij;
사실을 반환;
}
}
}
2. MyMaxCD.cs
시스템 사용;
네임스페이스 MyMethods
{
공개 클래스 MaxCDClass
{
공개 정적 긴 MaxCD(긴 i, 긴 j)
{
긴 a,b,온도;
만약(i>j)
{
a = 나;
b = j;
}
또 다른
{
b = 나;
a = j;
}
온도 = a % b;
동안(온도!=0)
{
a = b;
b = 온도;
온도 = a % b;
}
b를 반환;
}
}
}
이 두 파일을 만들 때 Visual Studio.NET이나 기타 텍스트 편집기, 심지어 메모장도 사용할 수 있다는 점에 유의해야 합니다. 이 두 파일은 동일한 파일에 있지는 않지만 동일한 네임스페이스에 속하므로 향후 이 두 가지 방법을 사용하는 것이 편리합니다. 물론 서로 다른 네임스페이스에 속할 수도 있으니 전혀 문제가 없지만 적용할 때 두 개의 서로 다른 네임스페이스만 참조하면 되므로 저자는 하나의 네임스페이스 아래에 작성하는 것이 더 낫다고 권장합니다.
다음 작업은 이 두 cs 파일을 필요한 DLL 파일로 바꾸는 것입니다. 방법은 다음과 같습니다. Microsoft.NET Framework가 설치된 운영 체제에서는 Windows가 있는 디렉터리에서 Microsoft.NET 디렉터리를 찾을 수 있습니다. C# 컴파일러는 이 디렉터리에 제공됩니다. CSC.EXE를 실행하세요: csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs. 완료되면 이 디렉터리에서 방금 생성한 MyDLL.DLL 파일을 찾을 수 있습니다. /target:library 컴파일러 옵션은 컴파일러에게 EXE 파일 대신 DLL 파일을 출력하도록 지시합니다. /out 컴파일러 옵션 뒤에 파일 이름이 오면 DLL 파일 이름이 지정됩니다. /out 뒤에 파일 이름이 없으면 컴파일러는 첫 번째 파일(MySwap.cs)을 DLL 파일 이름으로 사용합니다. 생성된 파일은 MySwap.DLL 파일입니다.
자, 이제 동적 링크 라이브러리 파일 생성 작업이 완료되었습니다. 이제 우리가 만든 동적 링크 라이브러리 파일을 사용하는 방법을 소개하겠습니다. 4. DLL 사용 방금 작성한 두 가지 방법이 올바른지 테스트하기 위해 작은 프로그램을 작성합니다.
MyClient.cs
시스템 사용;
using MyMethods; //여기서 방금 정의한 네임스페이스를 참조합니다. 지금 두 개의 다른 네임스페이스에 두 파일을 작성합니다.
클래스 MyClient
{
공개 정적 무효 Main(string[] args)
{
if (args.Length != 2)
{
Console.WriteLine("사용법: MyClient <num1> <num2>");
반품;
}
long num1 = long.Parse(args[0]);
긴 숫자2 = long.Parse(args[1]);
SwapClass.Swap(참조 번호1,참조 번호2);
// 파일 시작 부분에 있는 using 지시문을 사용하면 정규화되지 않은 클래스 이름을 사용하여 컴파일 타임에 DLL 메서드를 참조할 수 있습니다.
Console.WriteLine("스왑 결과는 num1 = {0} 및 num2 ={1}입니다.",num1, num2);
long maxcd = MaxCDClass.MaxCD(num1,num2);
Console.WriteLine("{0} 및 {1}의 MaxCD는 {2}입니다.",num1, num2, maxcd);
}
}
실행 가능한 MyClient.exe를 생성하려면 다음 명령줄을 사용하십시오.
csc /out:MyClient.exe /reference:MyDLL.DLL MyClient.cs
/out 컴파일러 옵션은 컴파일러에게 EXE 파일을 출력하도록 지시하고 출력 파일 이름(MyClient.exe)을 지정합니다. /reference 컴파일러 옵션은 프로그램이 참조하는 DLL 파일을 지정합니다.
5. 실행
프로그램을 실행하려면 EXE 파일 이름 뒤에 숫자 두 개를 입력하세요. 예: MyClient 123 456
6. 출력
스왑 결과는 num1 = 456, num2 = 123입니다.
456과 123의 최대 CD는 3입니다.
7. 요약
동적 링크에는 다음과 같은 장점이 있습니다.
1. 메모리를 절약하고 스왑 작업을 줄입니다. 많은 프로세스가 DLL을 동시에 사용하여 메모리의 DLL 복사본을 공유할 수 있습니다. 대신, 정적으로 링크된 라이브러리로 구축된 각 애플리케이션에 대해 Windows는 라이브러리 코드의 복사본을 메모리에 로드해야 합니다.
2. 디스크 공간을 절약하십시오. 많은 응용 프로그램이 디스크의 DLL 복사본을 공유할 수 있습니다. 대신, 정적으로 링크된 라이브러리로 구축된 각 애플리케이션에는 실행 가능한 이미지에 별도의 복사본으로 링크된 라이브러리 코드가 있습니다. 3. DLL로 업그레이드하는 것이 더 쉽습니다. DLL의 함수가 변경되면 해당 함수의 매개변수와 반환 값이 변경되지 않는 한 이를 사용하는 애플리케이션을 다시 컴파일하거나 다시 링크할 필요가 없습니다. 이와 대조적으로, 정적으로 연결된 개체 코드에서는 기능이 변경될 때 응용 프로그램을 다시 연결해야 합니다.
4. 판매 후 지원을 제공하십시오. 예를 들어, 모니터 드라이버 DLL을 수정하여 응용 프로그램이 처음 출시되었을 때 사용할 수 없었던 모니터를 지원할 수 있습니다.
5. 다국어 프로그램을 지원합니다. 다른 프로그래밍 언어로 작성된 프로그램은 해당 프로그램이 함수의 호출 규칙을 따르는 한 동일한 DLL 함수를 호출할 수 있습니다. 프로그램과 DLL 함수는 함수가 스택에 인수를 푸시할 것으로 예상하는 순서, 함수 또는 응용 프로그램이 스택 지우기를 담당하는지 여부, 인수가 레지스터에 전달되는지 여부에 따라 호환되어야 합니다.
6. MFC 라이브러리 클래스를 확장하기 위한 메커니즘을 제공합니다. 기존 MFC 클래스에서 클래스를 파생시키고 MFC 애플리케이션에서 사용할 수 있도록 MFC 확장 DLL에 배치할 수 있습니다.
7. 국제 버전을 쉽게 만들 수 있습니다. 리소스를 DLL에 배치하면 응용 프로그램의 국제 버전을 만드는 것이 훨씬 쉬워집니다. 애플리케이션의 각 언어 버전에 대한 문자열을 별도의 DLL 리소스 파일에 넣고 다양한 언어 버전에서 적절한 리소스를 로드하도록 할 수 있습니다.
DLL 사용의 한 가지 잠재적인 단점은 응용 프로그램이 자체 포함되지 않는다는 것입니다. 별도의 DLL 모듈이 있어야 합니다.