Процесс компиляции файлов .cs в .dll с помощью команды csc
Часто нам необходимо отдельно скомпилировать файл .cs в файл .dll. Операция выглядит следующим образом:
Откройте командное окно->введите cmd в консоль->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322
Перейдите в каталог, в котором установлен vs.net -> выполните команду csc csc /target:library File.cs -> сгенерируйте в каталоге файл .dll с соответствующим именем (предварительное условие: поместите файл .cs в C: Каталог WINDOWSMicrosoft.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 Компилирует все файлы C# в текущем каталоге с использованием оптимизации и определения символов DEBUG. Результатом является 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 должны быть вам знакомы. Это аббревиатура динамически подключаемой библиотеки (DLL). Это исполняемый файл, который представляет собой библиотеку общих функций. Динамическое связывание предоставляет процессу возможность вызывать функции, которые не являются частью его исполняемого кода. Исполняемый код функции находится в DLL, содержащей одну или несколько функций, которые были скомпилированы, связаны и сохранены отдельно от процесса, который их использует. Библиотеки DLL также помогают совместно использовать данные и ресурсы. Несколько приложений могут одновременно получать доступ к содержимому одной копии DLL в памяти.
Как и большинство программистов, вы, должно быть, часто использовали библиотеки DLL. Вы когда-нибудь чувствовали, что это приносит вам хорошие ошибки в программировании и кодировании? Сегодня я хочу обсудить с вами тему: как создавать и вызывать DLL (динамически подключаемую библиотеку) на C#. На самом деле, в широком смысле, DLL это позволяет. мне, чтобы более гибко организовывать и писать наши приложения. Как разработчик программного обеспечения, я могу на основе этого добиться высокого эффекта повторного использования кода. Позвольте мне рассказать, как создавать и вызывать DLL на C#.
2. Подготовительные работы
Нам нужно кратко рассказать о том, что мы собираемся делать дальше. В этой статье мы будем использовать язык C# для создания динамической библиотеки с именем MyDLL.DLL. В этом файле динамической библиотеки мы предоставим две функции. Обменять значения двух параметров. Другая функция — найти наибольший общий делитель двух параметров. Затем создайте приложение для использования этой DLL. Запустите и выведите результаты.
3. Создайте DLL
Давайте создадим следующие три файла кода C#:
1. MySwap.cs
}
использование системы;
пространство имен MyMethods
{
публичный класс SwapClass
{
public static bool Swap(ref long i,ref long j)
{
я = я+j;
j = ij;
я = ij;
вернуть истину;
}
}
}
2. MyMaxCD.cs
использование системы;
пространство имен MyMethods
{
публичный класс MaxCDClass
{
общедоступный статический длинный MaxCD (длинный i, длинный j)
{
длинный a,b,temp;
если (я>j)
{
а = я;
б = j;
}
еще
{
б = я;
а = j;
}
температура = а % б;
пока (темп!=0)
{
а = б;
б = температура;
температура = а % б;
}
вернуть б;
}
}
}
Следует отметить, что при создании этих двух файлов мы можем использовать Visual Studio.NET или другие текстовые редакторы, даже Блокнот. Хотя эти два файла не находятся в одном файле, они принадлежат одному и тому же пространству имен, что позволит нам удобно использовать эти два метода в будущем. Конечно, они также могут принадлежать разным пространствам имен, и это совершенно нормально, но нам нужно ссылаться только на два разных пространства имен, когда мы их применяем, поэтому автор рекомендует лучше писать их под одним пространством имен.
Следующая задача — превратить эти два cs-файла в нужные нам DLL-файлы. Метод следующий: в операционной системе с установленной Microsoft.NET Framework мы можем найти каталог Microsoft.NET в каталоге, где находится Windows. В этом каталоге находится компилятор C#. Запустите CSC.EXE: csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs. После завершения вы сможете найти только что созданный нами файл MyDLL.DLL в этом каталоге. Параметр компилятора /target:library указывает компилятору выводить файлы DLL вместо файлов EXE. Параметр компилятора /out, за которым следует имя файла, указывает имя файла DLL. Если за параметром /out не следует имя файла, компилятор использует первый файл (MySwap.cs) в качестве имени файла DLL. Созданный файл — это файл MySwap.DLL.
Хорошо! Наша задача по созданию файла динамической библиотеки завершена. Теперь пришло время насладиться плодами нашего труда. Ниже я расскажу, как использовать созданный нами файл динамической библиотеки. 4. Использование DLL. Мы просто напишем небольшую программу, чтобы проверить корректность двух только что написанных методов. Хорошо, следуйте за мной:
МойКлиент.cs
использование системы;
using MyMethods; //Здесь мы ссылаемся на только что определенное пространство имен. Если мы сейчас напишем два файла в двух разных пространствах имен.
класс МойКлиент
{
public static void Main(string[] args)
{
если (args.Length!= 2)
{
Console.WriteLine("Использование: MyClient <num1> <num2>");
возвращаться;
}
long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]);
SwapClass.Swap(ref num1, ref num2);
// Обратите внимание, что директива using в начале файла позволяет использовать неполные имена классов для ссылки на методы DLL во время компиляции.
Console.WriteLine("Результат обмена: num1 = {0} и num2 = {1}", num1, num2);
длинный maxcd = MaxCDClass.MaxCD(num1,num2);
Console.WriteLine("Максимальный компакт-диск {0} и {1} равен {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.
Максимальный CD 456 и 123 равен 3.
7. Резюме
Динамические ссылки имеют следующие преимущества:
1. Экономьте память и сокращайте операции подкачки. Многие процессы могут использовать DLL одновременно, разделяя копию DLL в памяти. Вместо этого для каждого приложения, созданного с использованием статически связанной библиотеки, Windows должна загрузить копию кода библиотеки в память.
2. Экономьте место на диске. Многие приложения могут совместно использовать копию DLL на диске. Вместо этого каждое приложение, созданное с использованием статически связанной библиотеки, имеет код библиотеки, связанный с его исполняемым образом в виде отдельной копии. 3. Легче перейти на DLL. Когда функции в DLL изменяются, приложения, которые их используют, не нужно перекомпилировать или перелинковывать, пока не изменяются параметры функции и возвращаемые значения. Напротив, статически связанный объектный код требует повторной компоновки приложения при изменении функций.
4. Обеспечьте послепродажную поддержку. Например, DLL драйвера монитора можно изменить для поддержки мониторов, которые недоступны при первоначальной поставке приложения.
5. Поддержка многоязычных программ. Программы, написанные на разных языках программирования, могут вызывать одну и ту же функцию DLL, если программа следует соглашению о вызове функции. Программы и функции DLL должны быть совместимы в том порядке, в котором функция ожидает помещения своих аргументов в стек, независимо от того, отвечает ли функция или приложение за очистку стека, а также в том, передаются ли какие-либо аргументы в регистрах.
6. Предоставляет механизм расширения классов библиотеки MFC. Вы можете получить классы из существующих классов MFC и поместить их в библиотеки DLL расширения MFC для использования приложениями MFC.
7. Упростите создание международных версий. Поместив ресурсы в DLL, становится намного проще создавать международные версии вашего приложения. Вы можете поместить строки для каждой языковой версии вашего приложения в отдельный файл ресурсов DLL и использовать разные языковые версии для загрузки соответствующих ресурсов.
Одним из потенциальных недостатков использования DLL является то, что приложение не является самодостаточным; оно зависит от наличия отдельного модуля DLL;