Поиск

Создание сборок

Если вы создаете DLL с переключателем /t:library, то не сможете добавить ее к другой сборке. Дело в том, что компилятор автоматически генерирует декларацию для этой DLL, которая поэтому сама является сборкой. Чтобы увидеть это в действии, рассмотрим пример. У нас есть DLL (ModulelServer.cs), у которой есть фиктивный тип Module!Server.

11 Module1Server.cs
// компоновка со следующими переключателями командной строки:
// esc /t:library Module1Server.cs
public class ModulelServer
{
}
Клиентский код в дальнейшем ссылается на эту
DLL (Module 1-Client.cs):
// Module1ClientApp.cs
// компоновка со следующими переключателями командной строки:
// esc Module1ClientApp.cs /г:Module1Server.dll
using System;
using System.Diagnostics;
using System.Reflection;
class ModulelClientApp {
public static void Main() {
Assembly DLLAssembly = Assembly.6etAssembly(typeof (ModulelServer));
Console.WriteLine("Module1Server.dll Assembly Information");
Console.WriteLine("\t" + DLLAssembly);
Process p = Process.GetCurrentProcessO;
string AssemblyName = p.ProcessName + ".exe";
Assembly ThisAssembly = Assembly.LoadFrom(AssemblyName);
Console.WriteLine("Module1Client.exe Assembly Information");
Console.WriteLine("\t" + ThisAssembly); } }

А теперь допустим, что вы скомпоновали эти два модуля, используя переключатели:

esc /t:library ModulelServer.cs
esc ModulelClientApp.cs /r:Module1Server.dll

Если запустить программу, мы увидим информацию, доказывающую, что ЕХЕ и DLL существуют в своих собственных отдельных сборках:

Module1Server.dll Assembly Information
ModulelServer, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=null Module1Client.dll Assembly Information
ModulelClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

На самом деле, если бы вы изменили модификатор доступа класса ModulelServer с public на internal, клиентский код перестал бы компилироваться, так как по определению модификатор доступа internal указывает, что модифицируемый тип доступен для другого кода только из той же сборки.