Udostępnij za pośrednictwem


/clr (Kompilacja środowiska uruchomieniowego języka wspólnego)

Włącza aplikacje i składniki używać funkcji z common language runtime (CLR).

/clr[:options]

Argumenty

  • options
    Jeden lub więcej następujących parametrów, rozdzielanych przecinkami.

    • /clr
      Tworzy metadane dla aplikacji.Metadane mogą być spożywane przez inne aplikacje CLR i umożliwia aplikacji zużywają typów i danych w metadanych inne składniki środowiska CLR.

      Aby uzyskać więcej informacji, zobacz:

      Zestawy mieszane (natywne i zarządzane)i

      Porady: migracja do /clr.

    • /clr:pure
      Produkuje pośrednie języka Microsoft (MSIL)-tylko pliku wyjściowego, który nie ma żadnego kodu wykonywalnego macierzystego.Może jednak zawierać macierzyste typy skompilowany do MSIL.

      Aby uzyskać dodatkowe informacje, zobacz Kod czysty i weryfikowalny (C++/CLI).

    • /clr:safe
      Produkuje tylko MSIL (nie pliku wykonywalnego kodu macierzystego), pliku wyjściowego sprawdzalnych./clr:safeUmożliwia weryfikację diagnostics (Narzędzie PEVerify (Peverify.exe)).

      Aby uzyskać dodatkowe informacje, zobacz Writing Verifiably Type-Safe Code.

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

      Rozszerzenia zarządzane na podstawie składni języka C++ jest niezalecane.Użycie /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ć dodatkowe informacje, zobacz Funkcje języka dla określania wartości docelowej do środowiska CLR.

      Jeśli masz zarządzane rozszerzenia języka C++ aplikacji, można uaktualnić projektu do nowego składnią.Aby uzyskać dodatkowe informacje, 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.Zamiast tego użyj elementu /LN (Utwórz moduł MSIL).Aby uzyskać dodatkowe informacje, zobacz Deprecated Compiler Options.

      Program zarządzany, który nie ma zestawu metadanych w manifeście jest znany jako moduł.noAssembly Opcja może służyć tylko do modułu produkcji.Jeśli skompilować przy użyciu /c i /clr:noAssembly, a następnie określ /NOASSEMBLY opcję w fazie linker, aby utworzyć moduł.

      Przed Visual C++ 2005 /clr:noAssembly domniemanych /clr.Jednakże /clr również obsługuje teraz /clr:oldSyntax, dlatego należy określić /clr formularza po określeniu /clr:noAssembly.Na przykład /clr:noAssembly /clr tworzy moduł za pomocą nowej 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 implikowane po określeniu /clr:noAssembly.

    • /clr:initialAppDomain
      Umożliwia Visual C++ aplikacji, aby działała w wersji 1 środowiska CLR.Jeśli używasz initialAppDomain, a następnie może zobaczyć niektóre z problemów, które zostały omówione w BUG: AppDomainUnloaded wyjątek, gdy używasz zarządzane rozszerzenia dla składników programu Visual C++ w witrynie pomocy technicznej firmy Microsoft w sieci Web.

      Aplikacja, która jest kompilowana za pomocą initialAppDomain nie powinien być używany przez aplikację, która używa programu ASP.NET, ponieważ nie jest obsługiwane w wersji 1 środowiska CLR.

    • /clr:nostdlib
      Nakazuje kompilatorowi Ignoruj domyślny katalog \clr.Kompilator generuje błędy w przypadku dołączania wielu wersji biblioteki DLL, takich jak System.dll.Użycie tej opcji umożliwia określenie szczegółowych ram 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 dostępu do obiektów zarządzanych.Aby uzyskać dodatkowe informacje, zobacz /clr Ograniczenia.

Aby uzyskać informacje dotyczące sposobu opracowywania aplikacji, które definiują i zużywają typy zarządzane, zobacz Funkcje języka dla określania wartości docelowej do środowiska CLR.

Skompilowane przy użyciu aplikacji /clr mogą lub nie mogą zawierać danych zarządzanych.

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

Tylko typy CLR zostanie utworzone na stercie zebrane śmieci.Aby uzyskać dodatkowe informacje, zobacz Klasy i strukturach (zarządzanych).Aby skompilować funkcję do kodu macierzystego, należy użyć unmanaged pragma.Aby uzyskać dodatkowe informacje, zobacz zarządzane, niezarządzane.

Domyślnie /clr nie jest włączone.Po /clr , /MD jest również w efekcie.Aby uzyskać dodatkowe informacje, zobacz /MD, /MT, /LD (Korzystaj z bibliotek wykonawczych)./MDzagwarantować, że dynamicznie połączone, wielowątkowe wersje procedur obsługi są wybrane z plików standardowy nagłówek (.h).Wielowątkowość jest wymagany, programowania, ponieważ moduł garbage collector CLR działa finalizatorów w pomocnicze wątku zarządzany.

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

/clrpociąga za sobą /EHaani żadnej innej /EH opcje są obsługiwane dla /clr.Aby uzyskać dodatkowe informacje, zobacz /EH (Model obsługi wyjątku).

Aby uzyskać informacje na temat sposobu określania typu obrazu CLR, zobacz /CLRHEADER.

Wszystkie moduły przekazany do danego wywołanie linker musi być skompilowana przy użyciu tej samej opcji kompilatora biblioteki wykonawczej (/MD lub /LD).

Użycie /ASSEMBLYRESOURCE opcję linker, aby osadzić zasób w zestawie./ DELAYSIGN, /KEYCONTAINER, i /KEYFILE opcje linker także pozwalają dostosować sposób tworzenia zestawu.

Gdy /clr jest używany, _MANAGED symbol jest definiowany jako 1.Aby uzyskać dodatkowe informacje, zobacz Wstępnie zdefiniowane makra.

Zmienne globalne w pliku obiektu macierzystego są inicjowane (podczas DllMain, jeśli plik wykonywalny jest biblioteką DLL), a potem zmiennych globalnych w sekcji zarządzane są inicjowane (przed uruchomieniem dowolnego kodu zarządzanego).#pragmainit_seg tylko ma wpływ na kolejność inicjowania w kategoriach, zarządzane lub niezarządzane.

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 biblioteka C wykonywania (CRT).CRT nie jest jednak sprawdzalne, więc nie można używać CRT podczas kompilacji przy użyciu /clr:safe.Aby uzyskać dodatkowe informacje, zobacz Biblioteka CRT — Funkcje.

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

Każdy punkt wejścia obrazu czystego lub bezpieczne jest zarządzany.Przy kompilacji przy użyciu /clr, punkt wejścia jest macierzystym.Aby uzyskać dodatkowe informacje, zobacz __clrcall.

Przy kompilacji przy użyciu /clr:safe, domyślnie, zmienne są elementu appdomain i nie można go na proces.Dla /clr:pure, chociaż appdomain jest ustawieniem domyślnym, można użyć procesu zmiennych.

Kiedy uruchomienie pliku .exe 32-bitowych, które został skompilowany przy użyciu /clr lub /clr:pure w 64-bitowym systemie operacyjnym, aplikacja będzie uruchamiana 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 skompilowany przy użyciu /clr:safe będzie działać na 64-bitowe środowisko CLR na komputerze, na którym jest uruchomiona 64-bitowym systemie operacyjnym. (Na 32-bitowym systemie operacyjnym, na 32-bitowe środowisko CLR czy uruchomić ten sam plik .exe). Jednak jest bezpieczną aplikacją można załadować składnika 32-bitowego.W takim przypadku awaryjnym obrazu, uruchomiona w ramach wsparcia 64-bitowy system operacyjny zakończy się niepowodzeniem podczas ładowania aplikacji 32-bitowych (BadFormatException).W celu zapewnienia, że bezpieczne obrazu będzie kontynuował działanie podczas jej ładowania obrazu 32-bitowe w 64-bitowym systemie operacyjnym, należy użyć /CLRIMAGETYPE Aby zmienić metadane (.corflags) i oznaczyć ją do uruchomienia w emulatorze WOW64.Następujący wiersz polecenia jest przykładem. (Zastąpić symbol zapisu).

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

Aby uzyskać informacje o tym, jak uzyskać nazwę dekoracyjną, zobacz Korzystanie z listy do wyświetlania nazw ozdobionych.Aby uzyskać więcej informacji o programowaniu w środowisku 64-bitowym, zobacz Konfigurowanie programów 64-bitowe (Visual C++).

Aby uzyskać przykłady, instruktaże i więcej informacji zobacz:

Metadane i bez nazwy klas

Bez nazwy klas pojawią się w metadanych następujące nazwy: $UnnamedClass$crc-of-current-file-name$index$, gdzie index to kolejny liczba klas bez nazwy w kompilacji.Na przykład poniższy przykładowy kod generuje bez nazwy klasy w metadanych.

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

Ildasm.exe umożliwia wyświetlanie metadanych.

Aby ustawić opcję kompilatora w programie Visual Studio

  1. W Solution Explorer, kliknij prawym przyciskiem myszy nazwę projektu, a następnie kliknij 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 obsługuje aparatu plików wykonywalnych języka wspólnego właściwości.

    [!UWAGA]

    Gdy /clr jest włączona 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, zgodnie z wymogami.Na przykład jeśli /RTC jest ustawiony a następnie /clr jest włączone, /RTC zostaną wyłączone.

    Ponadto, kiedy debugowania /clr aplikacji, ustaw Typu debugera właściwość, aby mieszane lub zarządzane tylko.Aby uzyskać dodatkowe informacje, zobacz Ustawienia projektu dla konfiguracji debugowania w 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