Udostępnij za pośrednictwem


/ CLR (kompilacja wspólnej Language Runtime)

Włącza aplikacje i składniki korzystać z funkcji ze środowiska common language runtime (CLR).

/clr[:options]

Argumenty

  • options
    Jeden lub więcej z następujących przełączników rozdzielanych przecinkami.

    • /clr
      Tworzy metadanych dla aplikacji.Metadane mogą być wykorzystane przez inne aplikacje CLR i umożliwia aplikacji zużyje typów i danych w metadanych innych składników środowiska CLR.

      Aby uzyskać więcej informacji zobacz

      Mieszane (macierzystych i zarządzanych)i

      Jak: Migrowanie do/CLR.

    • /clr:pure
      Wytwarza Microsoft pośrednie języka MSIL ()-tylko plik wyjściowy nie macierzysty kod wykonywalny.Może jednak zawierać native types zestawionych MSIL.

      Aby uzyskać więcej informacji, zobacz Kod czystej i zweryfikowania (C + +/ CLI).

    • /clr:safe
      Wytwarza MSIL tylko (nie macierzysty kod wykonywalny), plik wyjściowy możliwych do zweryfikowania./clr:safeUmożliwia weryfikację diagnostics (PEVerify Tool (Peverify.exe)).

      Aby uzyskać więcej informacji, zobacz Writing Verifiably Type-Safe Code.

    • /clr:oldSyntax
      Włącza rozszerzenia zarządzane dla składni języka C++, który jest oryginałem Visual C++ składni, CLR programowania. 

      Rozszerzenia zarządzane dla składni języka C++ jest niezalecane.Użyj /clr:oldSyntax tylko wtedy, gdy są utrzymanie aplikacji używającej rozszerzenia zarządzane dla języka C++.Jeśli tworzysz nową aplikację, należy użyć składni zaktualizowane.Aby uzyskać więcej informacji, zobacz Składnik rozszerzeń dla platform Runtime.

      Jeśli rozszerzenia zarządzane dla aplikacji C++ można uaktualnić projekt, aby użyć nowych składni.Aby uzyskać więcej informacji, zobacz Przenoszenie i uaktualnianie programów.

    • /clr:noAssembly
      Określa, że manifest zestawu nie można wstawić do pliku wyjściowego.Domyślnie noAssembly opcji nie jest włączone.

      noAssembly Opcja została zaniechana.Użyj /LN (Utwórz moduł MSIL) zamiast.Aby uzyskać więcej informacji, zobacz Deprecated Compiler Options.

      Zarządzany program, który nie ma w manifeście zestawu metadanych jest znany jako Moduł.noAssembly Opcja może służyć wyłącznie do produkcji moduł.Jeśli skompilować przy użyciu /c i /clr:noAssembly, następnie określić /NOASSEMBLY opcję w fazie program łączący, aby utworzyć moduł.

      Przed Visual C++ 2005 /clr:noAssembly dorozumiane /clr.Jednakże /clr również obsługuje teraz /clr:oldSyntax, dlatego należy określić /clr formularza podczas określania /clr:noAssembly.Na przykład /clr:noAssembly /clr tworzy moduł przy użyciu nowych Visual C++ składni CLR i /clr:noAssembly,oldSyntax tworzy moduł przy użyciu rozszerzenia zarządzane dla języka C++.

      Przed Visual C++ 2005 /clr:noAssembly wymagane /LD./LDteraz jest implikowana podczas określania /clr:noAssembly.

    • /clr:initialAppDomain
      Umożliwia Visual C++ uruchamiania aplikacji w wersji 1 środowiska CLR.Jeśli korzystasz z initialAppDomain, a następnie może pojawić się niektóre problemy, które zostały omówione w BUG: AppDomainUnloaded wyjątek podczas korzystania z zarządzanych rozszerzeń dla składników programu Visual C++ w witrynie pomocy technicznej firmy Microsoft w sieci Web.

      Aplikacja, która jest kompilowana przy użyciu initialAppDomain nie powinny być używane przez aplikacji korzystającej z ASP.NET, ponieważ nie jest obsługiwane w wersji 1 środowiska CLR.

    • /clr:nostdlib
      Nakazuje kompilatorowi ignorowanie domyślny katalog \clr.Kompilator powoduje błędy, jeśli łącznie z wielu wersji biblioteki DLL, takich jak plik System.dll.Użycie tej opcji umożliwia określenie szczególnych ram, które mają być używane podczas kompilacji.

Uwagi

Kod zarządzany jest kod, który może być kontrolowane i zarządzane przez środowisko CLR.Kod zarządzany, można uzyskać dostęp do obiektów zarządzanych.Aby uzyskać więcej informacji, zobacz / CLR ograniczeń.

Aby uzyskać informacje dotyczące tworzenia aplikacji służących do definiowania i zużywają typy zarządzane, zobacz Składnik rozszerzeń dla platform Runtime.

Skompilowane przy użyciu aplikacji /clr może lub nie może zawierać dane zarządzane.

Aby włączyć debugowanie, zarządzanej aplikacji, zobacz / ASSEMBLYDEBUG (Dodaj DebuggableAttribute).

Tylko typy CLR zostanie utworzone w zebranych garbage sterty.Aby uzyskać więcej informacji, zobacz Klasy i struktury (C++ Component Extensions).Aby skompilować funkcję do kodu macierzystego, należy użyć unmanaged pragma.Aby uzyskać więcej informacji, zobacz managed, unmanaged.

Domyślnie /clr nie jest włączone.Gdy /clr , /MD jest również efektu.Aby uzyskać więcej informacji, zobacz / /LD MD, /MT, (Użyj Run-Time Library)./MDzapewnia, że wybrano dynamicznie połączone, wielowątkowe wersje procedur runtime z plików standardowego nagłówka (.h).Multithreading jest wymagana dla zarządzanych programowania, ponieważ CLR tbody finalizatorów w wątek pomocniczy.

Jeśli skompilować przy użyciu /c, można określić typ CLR (IJW, bezpieczne lub czystego) wynikowy plik wyjściowy z /CLRIMAGETYPE.

/clrpociąga za sobą /EHaani żadnej innej /EH opcje są obsługiwane dla /clr.Aby uzyskać więcej informacji, zobacz /Eh (Model obsługi wyjątków).

Aby uzyskać informacje dotyczące, w celu określenia typu CLR obrazu w pliku, zobacz / CLRHEADER.

Wszystkie moduły przekazany do danego wywołanie łączący musi zostać skompilowany przy użyciu tych samych opcji kompilatora run-time library (/MD lub /LD).

Użyj /ASSEMBLYRESOURCE linker opcję, aby osadzić zasób w zestawie./ DELAYSIGN, /KEYCONTAINER, i /KEYFILE linker opcje umożliwiają również dostosowywać sposób tworzenia zestawu.

Gdy /clr jest używana, _MANAGED symbol jest zdefiniowany jako 1.Aby uzyskać więcej informacji, zobacz Wstępnie zdefiniowane makra.

Zmienne globalne w pliku obiektu macierzystego są inicjowane pierwszej (podczas DllMain, jeśli plik wykonywalny jest biblioteką DLL) i zmienne globalne w sekcji zarządzane są inicjowane (przed jest uruchomienie dowolnego kodu zarządzanego).#pragmainit_seg dotyczy tylko kolejność inicjowania w kategoriach zarządzanych i niezarządzanych.

Kompilowanie za pomocą /clr:safe jest analogiczny do kompilowania za pomocą /platform:anycpu w językach takich jak C#.

Bezpieczne i czyste obrazów

Czysty obraz używa wersji środowiska CLR C run-time library (CRT).CRT nie jest jednak możliwe do zweryfikowania, więc nie możesz użyć CRT podczas kompilowania za pomocą /clr:safe.Aby uzyskać więcej informacji, zobacz Funkcje biblioteki CRT.

Przykłady kodu macierzystego, który nie może występować w czysty obraz obejmują montaż wbudowane setjmp, i longjmp.

Każdy punkt wejścia obraz czystego lub bezpieczne jest zarządzany.Kiedy skompilować przy użyciu /clr, punkt wejścia jest macierzystym.Aby uzyskać więcej informacji, zobacz __clrcall.

Kiedy skompilować przy użyciu /clr:safe, domyślnie, zmienne są elementu appdomain i nie może być na proces.Dla /clr:pure, chociaż appdomain jest to ustawienie domyślne, można użyć proces zmiennych.

Kiedy uruchomiony plik exe 32-bitowe został skompilowany przy użyciu /clr lub /clr:pure na 64-bitowym systemie operacyjnym, aplikacja będzie uruchamiana w emulatorze WOW64, który umożliwia aplikacji 32-bitowych na CLR 32-bitowe w 64-bitowym systemie operacyjnym.Domyślnie w pliku .exe, który jest kompilowana przy użyciu /clr:safe będzie działać na CLR 64-bitowego na komputerze, na którym jest uruchomiona 64-bitowym systemie operacyjnym.(W 32-bitowym systemie operacyjnym tego samego pliku .exe zostałby uruchomiony 32-bitowe środowisko CLR.) Jednakże bezpiecznych aplikacji można załadować składnika 32-bitowych.W takim przypadku bezpieczne obrazu, działa system operacyjny nie obsługuje 64-bitowe powiedzie się podczas jej ładowania aplikacji 32-bitowych (BadFormatException).W celu zapewnienia, że bezpieczne obrazu kontynuuje działanie, podczas jej ładowania obrazu 32-bitowe w 64-bitowym systemie operacyjnym, należy użyć /CLRIMAGETYPE do zmiany metadanych (.corflags) i oznaczyć ją do uruchomienia w emulatorze WOW64.Przykładem jest następujący wiersz polecenia.(Zastąpić symbol wpisu).

cl /clr:safe t.cpp /link /clrimagetype:pure /entry:?main@@$$HYMHXZ /subsystem:console

Aby uzyskać informacje dotyczące uzyskiwania dekoracyjną nazwę, zobacz Przy użyciu widoku Lista zdobione nazwy.Aby uzyskać więcej informacji o programowaniu w środowisku 64-bitowego, zobacz Konfigurowanie programów 64-bitowe (Visual C++).

Dla próbek instruktaże i uzyskać więcej informacji, zobacz:

Metadane i bez nazwy klasy

Nazwy klas pojawią się w metadanych o nazwie następująco: $UnnamedClass$crc z bieżących pliku nazwa -$indeksu$, gdzie indeksu jest kolejne licznik nienazwane klas w kompilacji.Na przykład poniższy przykładowy kod generuje nazwy klasy w metadanych.

// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;

Ildasm.exe umożliwia wyświetlanie metadanych.

Aby ustawić tę opcję kompilatora w programie Visual Studio

  1. W Solution Explorer, kliknij prawym przyciskiem myszy nazwę projektu, a następnie kliknij przycisk Właściwości otworzyć projektu Stron właściwości okno dialogowe.

  2. Wybierz Właściwości konfiguracji folder.

  3. Na Ogólne właściwości strony, modyfikowanie plików wykonywalnych języka wspólnego wsparcia właściwości.

    [!UWAGA]

    Po /clr jest włączone w Stron właściwości okno dialogowe, właściwości opcji kompilatora, które nie są zgodne z /clr także są dostosowywane stosownie do potrzeb.Na przykład jeśli /RTC jest ustawiona i następnie /clr jest włączone, /RTC zostaną wyłączone.

    Ponadto podczas debugowania /clr aplikacji, ustaw Typu debugera właściwość, aby mieszane lub zarządzane tylko.Aby uzyskać więcej informacji, zobacz Ustawienia projektu dla konfiguracji debugowanie C++.

    Aby uzyskać informacje dotyczące tworzenia modułu, zobacz / NOASSEMBLY (Utwórz moduł MSIL).

Aby programowo ustawić tę opcję kompilatora

Zobacz też

Informacje

Opcje kompilatora

Ustawianie opcji kompilatora