/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:
/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
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.
Wybierz Właściwości konfiguracji folder.
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 CompileAsManaged.