Opcje kompilatora języka C# określające dane wejściowe

Następujące opcje kontrolują dane wejściowe kompilatora. Nowa składnia programu MSBuild jest wyświetlana w obszarze Pogrubienie. Starsza składnia csc.exe jest wyświetlana w pliku code style.

  • -reference / Odwołania lub -references: odwołania do metadanych z określonego pliku zestawu lub plików.
  • AddModules-addmodule / : Dodaj moduł (utworzony za pomocą target:module polecenia do tego zestawu).
  • EmbedInteropTypes / -link: osadź metadane z określonych plików zestawów międzyoperacyjnych.

Informacje

Opcja Odwołania powoduje, że kompilator importuje informacje o typie publicznym w określonym pliku do bieżącego projektu, umożliwiając odwołowanie się do metadanych z określonych plików zestawów.

<Reference Include="filename" />

filename to nazwa pliku zawierającego manifest zestawu. Aby zaimportować więcej niż jeden plik, dołącz oddzielny element odwołania dla każdego pliku. Alias można zdefiniować jako element podrzędny elementu Reference :

<Reference Include="filename.dll">
  <Aliases>LS</Aliases>
</Reference>

W poprzednim przykładzie LS jest prawidłowym identyfikatorem języka C#, który reprezentuje przestrzeń nazw katalogu głównego, która będzie zawierać wszystkie przestrzenie nazw w filename.dll zestawu. Importowane pliki muszą zawierać manifest. Użyj parametrów AdditionalLibPaths , aby określić katalog, w którym znajduje się co najmniej jeden z odwołań do zestawu. W temacie AdditionalLibPaths omówiono również katalogi, w których kompilator wyszukuje zestawy. Aby kompilator rozpoznawał typ w zestawie, a nie w module, musi być zmuszony do rozpoznania typu, co można zrobić, definiując wystąpienie typu. Istnieją inne sposoby rozpoznawania nazw typów w zestawie kompilatora: na przykład jeśli dziedziczysz z typu w zestawie, nazwa typu zostanie rozpoznana przez kompilator. Czasami konieczne jest odwołanie się do dwóch różnych wersji tego samego składnika z jednego zestawu. W tym celu należy użyć elementu Aliases w elemencie References dla każdego pliku, aby odróżnić oba pliki. Ten alias będzie używany jako kwalifikator nazwy składnika i zostanie rozpoznany jako składnik w jednym z plików.

Uwaga

W programie Visual Studio użyj polecenia Dodaj odwołanie . Aby uzyskać więcej informacji, zobacz How to: Add or Remove References By Using the Reference Manager (Instrukcje: dodawanie lub usuwanie odwołań przy użyciu Menedżera odwołań).

Tryby dodawania

Ta opcja dodaje moduł utworzony za pomocą przełącznika <TargetType>module</TargetType> do bieżącej kompilacji:

<AddModule Include=file1 />
<AddModule Include=file2 />

Gdzie file, file2 to pliki wyjściowe zawierające metadane. Plik nie może zawierać manifestu zestawu. Aby zaimportować więcej niż jeden plik, należy oddzielić nazwy plików przecinkami lub średnikami. Wszystkie moduły dodane za pomocą funkcji AddModules muszą znajdować się w tym samym katalogu co plik wyjściowy w czasie wykonywania. Oznacza to, że moduł można określić w dowolnym katalogu w czasie kompilacji, ale moduł musi znajdować się w katalogu aplikacji w czasie wykonywania. Jeśli moduł nie znajduje się w katalogu aplikacji w czasie wykonywania, otrzymasz element TypeLoadException. file nie może zawierać zestawu. Jeśli na przykład plik wyjściowy został utworzony przy użyciu opcji TargetType modułu, jego metadane można zaimportować za pomocą funkcji AddModules.

Jeśli plik wyjściowy został utworzony za pomocą opcji TargetType innej niż moduł, jego metadane nie mogą być importowane z dodatkiem AddModules, ale można je zaimportować z opcją Odwołania.

EmbedInteropTypes

Powoduje, że kompilator udostępnia kompilatorowi informacje o typie COM w określonych zestawach aktualnie kompilowanych.

<References>
  <EmbedInteropTypes>file1;file2;file3</EmbedInteropTypes>
</References>

Gdzie file1;file2;file3 to rozdzielana średnikami lista nazw plików zestawów. Jeśli nazwa pliku zawiera spację, należy ująć nazwę w cudzysłów. Opcja EmbedInteropTypes umożliwia wdrożenie aplikacji z osadzonymi informacjami o typie. Aplikacja może następnie używać typów w zestawie środowiska uruchomieniowego, które implementują informacje o typie osadzonym bez konieczności odwołowania się do zestawu środowiska uruchomieniowego. Jeśli opublikowano różne wersje zestawu środowiska uruchomieniowego, aplikacja zawierająca informacje o typie osadzonym może współdziałać z różnymi wersjami bez konieczności ponownego komilowania. Aby zapoznać się z przykładem, zobacz Przewodnik: osadzanie typów z zarządzanych zestawów.

Użycie opcji EmbedInteropTypes jest szczególnie przydatne podczas pracy z międzyoperacyjnością modelu COM. Typy MODELU COM można osadzić, aby aplikacja nie wymagała już podstawowego zestawu międzyoperacyjnych (PIA) na komputerze docelowym. Opcja EmbedInteropTypes nakazuje kompilatorowi osadzanie informacji o typie COM z zestawu międzyoperacyjnego przywoływanego do wynikowego skompilowanego kodu. Typ COM jest identyfikowany przez wartość CLSID (GUID). W związku z tym aplikacja może działać na komputerze docelowym, na którym zainstalowano te same typy COM z tymi samymi wartościami CLSID. Dobrym przykładem są aplikacje automatyzujące pakiet Microsoft Office. Ponieważ aplikacje takie jak pakiet Office zwykle zachowują tę samą wartość CLSID w różnych wersjach, aplikacja może używać przywoływanego typu COM, o ile program .NET Framework 4 lub nowszy jest instalowany na komputerze docelowym, a aplikacja używa metod, właściwości lub zdarzeń uwzględnionych w przywoływane typy COM. Opcja EmbedInteropTypes osadza tylko interfejsy, struktury i delegaty. Osadzanie klas COM nie jest obsługiwane.

Uwaga

Podczas tworzenia wystąpienia osadzonego typu COM w kodzie należy utworzyć wystąpienie przy użyciu odpowiedniego interfejsu. Próba utworzenia wystąpienia osadzonego typu COM przy użyciu klasy CoClass powoduje błąd.

Podobnie jak opcja kompilatora Odwołania, opcja kompilatora EmbedInteropTypes używa pliku odpowiedzi Csc.rsp, który odwołuje się do często używanych zestawów platformy .NET. Użyj opcji kompilatora NoConfig , jeśli nie chcesz, aby kompilator używał pliku Csc.rsp.

// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;

Typy, które mają parametr ogólny, którego typ jest osadzony z zestawu międzyoperacyjnego, nie mogą być używane, jeśli ten typ pochodzi z zestawu zewnętrznego. To ograniczenie nie ma zastosowania do interfejsów. Rozważmy na przykład Range interfejs zdefiniowany w Microsoft.Office.Interop.Excel zestawie. Jeśli biblioteka osadza typy międzyoperacyjności z Microsoft.Office.Interop.Excel zestawu i uwidacznia metodę zwracającą typ ogólny, który ma parametr, którego typem jest Range interfejs, ta metoda musi zwrócić interfejs ogólny, jak pokazano w poniższym przykładzie kodu.

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;
    }
}

W poniższym przykładzie kod klienta może wywołać metodę zwracającą IList interfejs ogólny bez błędu.

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();
    }
}