Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las siguientes opciones controlan las entradas del compilador. La nueva sintaxis de MSBuild se muestra en negrita. La sintaxis de csc.exe anterior se muestra en code style.
-
Referencias /
-referenceo-references: haga referencia a los metadatos del archivo o archivos de ensamblado especificados. -
AddModules /
-addmodule: agregue un módulo (creado contarget:moduleeste ensamblado). -
EmbedInteropTypes: inserte metadatos de los archivos de ensamblado de interoperabilidad especificados /
-link.
Referencias
La opción Referencias hace que el compilador importe información de tipo público en el archivo especificado en el proyecto actual, lo que le permite hacer referencia a metadatos de los archivos de ensamblado especificados.
<Reference Include="filename" />
filename es el nombre de un archivo que contiene un manifiesto de ensamblado. Para importar más de un archivo, incluya un elemento Reference independiente para cada archivo. Puede definir un alias como elemento secundario del elemento Reference :
<Reference Include="filename.dll">
<Aliases>LS</Aliases>
</Reference>
En el ejemplo anterior, LS es el identificador de C# válido que representa un espacio de nombres raíz que contendrá todos los espacios de nombres del ensamblado filename.dll. Los archivos que importe deben contener un manifiesto. Use AdditionalLibPaths para especificar el directorio en el que se encuentran una o varias de las referencias de ensamblado. En el tema AdditionalLibPaths también se describen los directorios en los que el compilador busca ensamblados. Para que el compilador reconozca un tipo en un ensamblado y no en un módulo, debe forzarse a resolver el tipo, lo que puede hacer definiendo una instancia del tipo. Hay otras maneras de resolver nombres de tipo en un ensamblado para el compilador: por ejemplo, si hereda de un tipo en un ensamblado, el compilador reconocerá el nombre de tipo. A veces es necesario hacer referencia a dos versiones diferentes del mismo componente desde dentro de un ensamblado. Para ello, use el elemento Aliases del elemento References para cada archivo para distinguir entre los dos archivos. Este alias se usará como calificador para el nombre del componente y se resolverá en el componente en uno de los archivos.
Nota:
En Visual Studio, use el comando Agregar referencia . Para obtener más información, vea Cómo: Agregar o quitar referencias mediante el Administrador de referencias.
AddModules
Esta opción agrega un módulo que se creó con el <OutputType>module</OutputType> modificador a la compilación actual:
<AddModule Include=file1 />
<AddModule Include=file2 />
Donde file, file2 son archivos de salida que contienen metadatos. El archivo no puede contener un manifiesto de ensamblado. Para importar más de un archivo, separe los nombres de archivo con una coma o un punto y coma. Todos los módulos agregados con AddModules deben estar en el mismo directorio que el archivo de salida en tiempo de ejecución. Es decir, puede especificar un módulo en cualquier directorio en tiempo de compilación, pero el módulo debe estar en el directorio de la aplicación en tiempo de ejecución. Si el módulo no está en el directorio de la aplicación en tiempo de ejecución, obtendrá un TypeLoadException.
file no puede contener un ensamblado. Por ejemplo, si el archivo de salida se creó con la opción OutputType del módulo, sus metadatos se pueden importar con AddModules.
Si el archivo de salida se creó con una opción OutputType distinta del módulo, sus metadatos no se pueden importar con AddModules , pero se pueden importar con la opción Referencias .
EmbedInteropTypes
Hace que el compilador haga que la información de tipo COM de los ensamblados especificados esté disponible para el proyecto que está compilando actualmente.
<References>
<EmbedInteropTypes>file1;file2;file3</EmbedInteropTypes>
</References>
Donde file1;file2;file3 es una lista delimitada por punto y coma de nombres de archivo de ensamblado. Si el nombre de archivo contiene un espacio, escriba el nombre entre comillas. La opción EmbedInteropTypes permite implementar una aplicación que tenga información de tipo incrustada. Después, la aplicación puede usar tipos en un ensamblado en tiempo de ejecución que implemente la información de tipo incrustado sin necesidad de hacer referencia al ensamblado en tiempo de ejecución. Si se publican varias versiones del ensamblado en tiempo de ejecución, la aplicación que contiene la información del tipo incrustado puede funcionar con las distintas versiones sin tener que volver a compilarse. Para obtener un ejemplo, consulte Tutorial: Inserción de tipos desde ensamblados administrados.
El uso de la opción EmbedInteropTypes es especialmente útil cuando se trabaja con la interoperabilidad COM. Puede insertar tipos COM para que la aplicación ya no requiera un ensamblado de interoperabilidad principal (PIA) en el equipo de destino. La opción EmbedInteropTypes indica al compilador que inserte la información de tipo COM del ensamblado de interoperabilidad al que se hace referencia en el código compilado resultante. El tipo COM se identifica mediante el valor clSID (GUID). Como resultado, la aplicación puede ejecutarse en un equipo de destino que haya instalado los mismos tipos COM con los mismos valores CLSID. Las aplicaciones que automatizan Microsoft Office son un buen ejemplo. Dado que las aplicaciones como Office suelen mantener el mismo valor CLSID en distintas versiones, la aplicación puede usar los tipos COM a los que se hace referencia siempre que .NET Framework 4 o posterior esté instalado en el equipo de destino y la aplicación use métodos, propiedades o eventos que se incluyen en los tipos COM a los que se hace referencia. La opción EmbedInteropTypes solo inserta interfaces, estructuras y delegados. No se admite la inserción de clases COM.
Nota:
Al crear una instancia de un tipo COM incrustado en el código, debe crear la instancia mediante la interfaz adecuada. Si se intenta crear una instancia de un tipo COM incrustado mediante CoClass, se produce un error.
Al igual que la opción del compilador References , la opción del compilador EmbedInteropTypes usa el archivo de respuesta Csc.rsp, que hace referencia a ensamblados .NET usados con frecuencia. Use la opción del compilador NoConfig si no desea que el compilador use el archivo Csc.rsp.
// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;
Los tipos que tienen un parámetro genérico cuyo tipo está incrustado desde un ensamblado de interoperabilidad no se pueden usar si ese tipo procede de un ensamblado externo. Esta restricción no se aplica a las interfaces. Por ejemplo, considere la Range interfaz definida en el Microsoft.Office.Interop.Excel ensamblado. Si una biblioteca inserta tipos de interoperabilidad del Microsoft.Office.Interop.Excel ensamblado y expone un método que devuelve un tipo genérico que tiene un parámetro cuyo tipo es la Range interfaz, ese método debe devolver una interfaz genérica, como se muestra en el ejemplo de código siguiente.
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;
}
}
En el ejemplo siguiente, el código de cliente puede llamar al método que devuelve la IList interfaz genérica sin errores.
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();
}
}