Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Следующие параметры управляют входными данными компилятора. Новый синтаксис MSBuild выделен полужирным шрифтом. Для старого синтаксиса csc.exe используется формат code style.
-
Ссылки /
-referenceили-references: ссылки на метаданные из указанного файла сборки или файлов. -
AddModules /
-addmodule: добавление модуля (созданного сtarget:moduleпомощью этой сборки.) -
EmbedInteropTypes /
-link: внедрение метаданных из указанных файлов сборок взаимодействия.
Ссылки
Параметр "Ссылки" приводит к импорту сведений о общедоступном типе в указанном файле в текущий проект, что позволяет ссылаться на метаданные из указанных файлов сборок.
<Reference Include="filename" />
filename — это имя файла, содержащего манифест сборки. Чтобы импортировать несколько файлов, добавьте отдельный элемент Reference для каждого файла. Псевдоним можно определить как дочерний элемент элемента Reference :
<Reference Include="filename.dll">
<Aliases>LS</Aliases>
</Reference>
В предыдущем примере является допустимым идентификатором C#, LS который представляет корневое пространство имен, которое будет содержать все пространства имен в сборкеfilename.dll. Импортируемые файлы должны содержать манифест. Используйте ДополнительныеLibPaths , чтобы указать каталог, в котором находится одна или несколько ссылок на сборку. В разделе AdditionalLibPaths также рассматриваются каталоги, в которых компилятор ищет сборки. Чтобы компилятор распознал тип в сборке, а не в модуле, необходимо принудительно разрешить тип, который можно сделать, определив экземпляр типа. Существуют другие способы разрешения имен типов в сборке компилятора: например, если вы наследуете тип в сборке, имя типа будет распознано компилятором. Иногда необходимо ссылаться на две разные версии одного компонента из одной сборки. Для этого используйте элемент Aliases в элементе References для каждого файла, чтобы различать два файла. Этот псевдоним будет использоваться в качестве квалификатора для имени компонента и будет разрешаться компоненту в одном из файлов.
Замечание
В Visual Studio используйте команду "Добавить ссылку ". Дополнительные сведения см. в разделе "Практическое руководство. Добавление или удаление ссылок с помощью диспетчера ссылок".
AddModules
Этот параметр добавляет модуль, созданный с <OutputType>module</OutputType> помощью переключателя в текущую компиляцию:
<AddModule Include=file1 />
<AddModule Include=file2 />
file Где file2— выходные файлы, содержащие метаданные. Файл не может содержать манифест сборки. Чтобы импортировать несколько файлов, разделите имена файлов с запятой или точкой с запятой. Все модули, добавленные с помощью AddModules , должны находиться в том же каталоге, что и выходной файл во время выполнения. То есть можно указать модуль в любом каталоге во время компиляции, но модуль должен находиться в каталоге приложения во время выполнения. Если модуль не в каталоге приложений во время выполнения, вы получите TypeLoadException.
file не может содержать сборку. Например, если выходной файл был создан с параметром OutputTypeмодуля, его метаданные можно импортировать с помощью AddModules.
Если выходной файл был создан с параметром OutputType , отличный от модуля, его метаданные нельзя импортировать с помощью AddModules , но можно импортировать с помощью параметра "Ссылки ".
EmbedInteropTypes
Компилятор делает сведения о типе COM в указанных сборках доступными для проекта, который в настоящее время компилируется.
<References>
<EmbedInteropTypes>file1;file2;file3</EmbedInteropTypes>
</References>
Где file1;file2;file3 находится список имен файлов сборки с запятой. Если имя файла содержит пробел, заключите имя в кавычки. Параметр EmbeddedInteropTypes позволяет развернуть приложение с внедренными сведениями о типе. Затем приложение может использовать типы в сборке среды выполнения, реализующей сведения о внедренном типе, не требуя ссылки на сборку среды выполнения. Если публикуются различные версии сборки среды выполнения, приложение, содержащее сведения о внедренных типах, может работать с различными версиями без необходимости перекомпилироваться. Пример см. в пошаговом руководстве. Внедрение типов из управляемых сборок.
Использование параметра EmbedInteropTypes особенно полезно при работе с COM-взаимодействием. Вы можете внедрить типы COM, чтобы приложение больше не требует основной сборки взаимодействия (PIA) на целевом компьютере. Параметр EmbedInteropTypes указывает компилятору внедрить сведения о типе COM из указанной сборки взаимодействия в результирующий скомпилированный код. Тип COM определяется значением CLSID (GUID). В результате приложение может работать на целевом компьютере, на котором установлены те же типы COM с теми же значениями CLSID. Приложения, автоматизирующие Microsoft Office, являются хорошим примером. Так как приложения, такие как Office, обычно сохраняют одно и то же значение CLSID в разных версиях, приложение может использовать ссылочные типы COM до тех пор, пока на целевом компьютере установлен .NET Framework 4 или более поздней версии, а приложение использует методы, свойства или события, включенные в ссылочные типы COM. Параметр EmbedInteropTypes внедряет только интерфейсы, структуры и делегаты. Внедрение классов COM не поддерживается.
Замечание
При создании экземпляра внедренного com-типа в коде необходимо создать экземпляр с помощью соответствующего интерфейса. Попытка создать экземпляр внедренного com-типа с помощью CoClass вызывает ошибку.
Как и параметр компилятора References , параметр компилятора EmbedInteropTypes использует файл ответа Csc.rsp, который ссылается на часто используемые сборки .NET. Используйте параметр компилятора NoConfig , если не хотите, чтобы компилятор использовал Csc.rsp-файл.
// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;
Типы, имеющие универсальный параметр, тип которого внедрен из сборки взаимодействия, нельзя использовать, если этот тип находится из внешней сборки. Это ограничение не применяется к интерфейсам. Например, рассмотрим Range интерфейс, определенный в сборке Microsoft.Office.Interop.Excel . Если библиотека внедряет типы взаимодействия из Microsoft.Office.Interop.Excel сборки и предоставляет метод, который возвращает универсальный тип, имеющий параметр, тип которого является Range интерфейсом, этот метод должен возвращать универсальный интерфейс, как показано в следующем примере кода.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
public class Utility
{
// The following code causes an error when called by a client assembly.
public List<Range> GetRange1()
{
return null;
}
// The following code is valid for calls from a client assembly.
public IList<Range> GetRange2()
{
return null;
}
}
В следующем примере клиентский код может вызывать метод, возвращающий универсальный IList интерфейс без ошибок.
public class Client
{
public void Main()
{
Utility util = new Utility();
// The following code causes an error.
List<Range> rangeList1 = util.GetRange1();
// The following code is valid.
List<Range> rangeList2 = (List<Range>)util.GetRange2();
}
}