/clr (Компиляция среды CLR)/clr (Common Language Runtime Compilation)

Позволяет приложениям и компонентам использовать функции среды CLR и выполнять компиляцию C++/CLI.Enables applications and components to use features from the common language runtime (CLR) and enables C++/CLI compilation.

СинтаксисSyntax

/clr[:Параметры ]/clr[:options ]

АргументыArguments

Параметрыoptions
Один или несколько из следующих аргументов с разделителями-запятыми.One or more of the following comma-separated arguments.

  • нетnone

    При отсутствии параметров /clr создает метаданные для компонента.With no options, /clr creates metadata for the component. Метаданные могут использоваться другими приложениями CLR и позволяют компоненту использовать типы и данные в метаданных других компонентов среды CLR.The metadata can be consumed by other CLR applications, and enables the component to consume types and data in the metadata of other CLR components. Дополнительные сведения см. в статье Смешанные (собственные и управляемые) сборки.For more information, see Mixed (Native and Managed) Assemblies.

  • NetCore

    /clr:NetCore Создает метаданные и код для компонента с помощью последней кросс-платформенной платформы .NET Framework, также известной как .NET Core./clr:NetCore creates metadata and code for the component using the latest cross-platform .NET framework, also known as .NET Core. Метаданные могут использоваться другими приложениями .NET Core.The metadata can be consumed by other .NET Core applications. Кроме того, параметр позволяет компоненту использовать типы и данные в метаданных других компонентов .NET Core.And, the option enables the component to consume types and data in the metadata of other .NET Core components.

  • nostdlib

    Указывает компилятору игнорировать каталог по умолчанию \clr .Instructs the compiler to ignore the default \clr directory. Компилятор выдает ошибки при включении нескольких версий библиотеки DLL, например System.dll.The compiler produces errors if you include multiple versions of a DLL, such as System.dll. Этот параметр позволяет указать конкретную платформу для использования во время компиляции.This option lets you specify the specific framework to use during compilation.

  • pure

    /clr:pure не рекомендуется к использованию ./clr:pure is deprecated . Этот параметр удален в Visual Studio 2017 и более поздних версий.The option is removed in Visual Studio 2017 and later. Мы рекомендуем перенести код, который должен быть чистым кодом MSIL, на C#.We recommend that you port code that must be pure MSIL to C#.

  • safe

    /clr:safe не рекомендуется к использованию ./clr:safe is deprecated . Этот параметр удален в Visual Studio 2017 и более поздних версий.The option is removed in Visual Studio 2017 and later. Мы рекомендуем перенести код, который должен быть безопасным кодом MSIL, на C#.We recommend that you port code that must be safe MSIL to C#.

  • noAssembly

    /clr:noAssembly не рекомендуется к использованию ./clr:noAssembly is deprecated . Вместо этого используйте /LN (создать модуль MSIL) .Use /LN (Create MSIL Module) instead.

    Указывает компилятору не вставлять манифест сборки в выходной файл.Tells the compiler not to insert an assembly manifest into the output file. По умолчанию noAssembly параметр не действует.By default, the noAssembly option isn't in effect.

    Управляемая программа, не имеющая метаданных сборки в манифесте, называется модулем .A managed program that doesn't have assembly metadata in the manifest is known as a module . noAssembly Параметр можно использовать только для создания модуля.The noAssembly option can be used only to produce a module. Если компиляция выполняется с помощью /c и /clr:noAssembly , то /NOASSEMBLY для создания модуля необходимо указать параметр на этапе компоновщика.If you compile by using /c and /clr:noAssembly , then specify the /NOASSEMBLY option in the linker phase to create a module.

    До выхода Visual Studio 2005 /clr:noAssembly обязательно /LD .Before Visual Studio 2005, /clr:noAssembly required /LD . /LD Теперь подразумевается при указании /clr:noAssembly ./LD is now implied when you specify /clr:noAssembly .

  • initialAppDomain

    initialAppDomain является устаревшим .initialAppDomain is obsolete . Позволяет запускать приложение C++/CLI в среде CLR версии 1.Enables a C++/CLI application to run on version 1 of the CLR. Приложение, компилируемое с помощью, initialAppDomain не должно использоваться приложением, использующим ASP.NET, так как оно не поддерживается в версии 1 среды CLR.An application that's compiled by using initialAppDomain shouldn't be used by an application that uses ASP.NET because it's not supported in version 1 of the CLR.

RemarksRemarks

Управляемый код — это код, который может проверяться и УПРАВЛЯТЬся средой CLR.Managed code is code that can be inspected and managed by the CLR. Управляемый код может обращаться к управляемым объектам.Managed code can access managed objects. Дополнительные сведения см. в разделе /clr ограничения.For more information, see /clr Restrictions.

Сведения о разработке приложений, которые определяют и потребляют управляемые типы в C++, см. в разделе расширения компонентов для платформ среды выполнения.For information about how to develop applications that define and consume managed types in C++, see Component Extensions for Runtime Platforms.

Приложение, скомпилированное с использованием, /clr может не содержать управляемые данные.An application compiled by using /clr may or may not contain managed data.

Сведения о включении отладки в управляемом приложении см. в разделе /ASSEMBLYDEBUG (Add DebuggableAttribute).To enable debugging on a managed application, see /ASSEMBLYDEBUG (Add DebuggableAttribute).

В куче с сбором мусора создаются экземпляры только типов CLR.Only CLR types are instantiated on the garbage-collected heap. Дополнительные сведения см. в статье Классы и структуры.For more information, see Classes and Structs. Для компиляции функции в машинный код используйте директиву unmanaged pragma.To compile a function to native code, use the unmanaged pragma. Дополнительные сведения см. managed в разделе unmanaged , .For more information, see managed, unmanaged.

По умолчанию /clr не действует.By default, /clr isn't in effect. Если /clr действует, действует /MD также и.When /clr is in effect, /MD is also in effect. Дополнительные сведения см. /MD в разделе /MT , /LD (использование библиотеки Run-Time).For more information, see /MD, /MT, /LD (Use Run-Time Library). /MD гарантирует, что в стандартных файлах заголовков выбираются динамически связываемые многопоточные версии подпрограмм среды выполнения./MD ensures that the dynamically linked, multithreaded versions of the runtime routines are selected from the standard header files. Многопоточность необходима для управляемого программирования, так как сборщик мусора CLR запускает методы завершения во вспомогательном потоке.Multithreading is required for managed programming because the CLR garbage collector runs finalizers in an auxiliary thread.

При компиляции с помощью служб /c можно указать тип CLR выходного файла с помощью /CLRIMAGETYPE параметра компоновщика.If you compile by using /c , you can specify the CLR type of the resulting output file by using the /CLRIMAGETYPE linker option.

/clr подразумевает /EHa , что другие /EH параметры для не поддерживаются /clr ./clr implies /EHa , and no other /EH options are supported for /clr . Дополнительные сведения см. в разделе /EH (модель обработки исключений).For more information, see /EH (Exception Handling Model).

Сведения о том, как определить тип образа среды CLR для файла, см. в разделе /CLRHEADER .For information about how to determine the CLR image type of a file, see /CLRHEADER.

Все модули, передаваемые в данный вызов компоновщика, должны быть скомпилированы с помощью одного и того же параметра компилятора библиотеки времени выполнения ( /MD или /LD ).All modules passed to a given invocation of the linker must be compiled by using the same run-time library compiler option ( /MD or /LD ).

Используйте /ASSEMBLYRESOURCE параметр компоновщика для внедрения ресурса в сборку.Use the /ASSEMBLYRESOURCE linker option to embed a resource in an assembly. /DELAYSIGN/KEYCONTAINER /KEYFILE Параметры компоновщика, и позволяют настроить способ создания сборки./DELAYSIGN, /KEYCONTAINER, and /KEYFILE linker options also let you customize how an assembly is created.

Если /clr используется, _MANAGED символ определяется как 1.When /clr is used, the _MANAGED symbol is defined to be 1. Дополнительные сведения см. в разделе стандартные макросы.For more information, see Predefined macros.

Глобальные переменные в собственном объектном файле инициализируются первыми ( DllMain Если исполняемый файл является библиотекой DLL), а затем инициализируются глобальные переменные в управляемом разделе (перед запуском любого управляемого кода).The global variables in a native object file are initialized first (during DllMain if the executable is a DLL), and then the global variables in the managed section are initialized (before any managed code is run). #pragma init_seg влияет только на порядок инициализации в управляемых и неуправляемых категориях.#pragma init_seg only affects the order of initialization in the managed and unmanaged categories.

Метаданные и неименованные классыMetadata and Unnamed Classes

Неименованные классы отображаются в метаданных под именами, например $UnnamedClass$<crc-of-current-file-name>$<index>$ , где <index> — это последовательный счетчик неименованных классов в компиляции.Unnamed classes appear in metadata under names such as $UnnamedClass$<crc-of-current-file-name>$<index>$, where <index> is a sequential count of the unnamed classes in the compilation. Например, следующий код создает неименованный класс в метаданных.For example, the following code sample generates an unnamed class in metadata.

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

Для просмотра метаданных используйте ildasm.exe.Use ildasm.exe to view metadata.

Установка данного параметра компилятора в среде разработки Visual StudioTo set this compiler option in the Visual Studio development environment

  1. Откройте диалоговое окно Страницы свойств проекта.Open the project's Property Pages dialog box. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.For details, see Set C++ compiler and build properties in Visual Studio.

  2. Задайте для раскрывающегося списка Конфигурация значение все конфигурации и задайте для раскрывающегося списка платформа значение все платформы .Set the Configuration dropdown to All configurations , and set the Platform dropdown to All Platforms .

  3. Выберите страницу Свойства конфигурации > C/C++ > Общие .Select the Configuration Properties > C/C++ > General page.

  4. Измените свойство Поддержка среды CLR .Modify the Common Language Runtime Support property. Выберите ОК для сохранения внесенных изменений.Choose OK to save your changes.

Примечание

В интегрированной среде разработки Visual Studio /clr параметр компилятора можно задать по отдельности на странице Общие Свойства конфигурации > C/C++ в > General диалоговом окне страницы свойств.In the Visual Studio IDE, the /clr compiler option can be individually set on the Configuration Properties > C/C++ > General page of the Property Pages dialog. Однако мы рекомендуем использовать шаблон CLR для создания проекта.However, we recommend you use a CLR template to create your project. Он задает все свойства, необходимые для успешного создания компонента среды CLR.It sets all of the properties required for successful creation of a CLR component. Другим способом установки этих свойств является использование свойства Поддержка среды CLR на странице Свойства конфигурации > Дополнительно диалогового окна страницы свойств.Another way to set these properties is to use the Common Language Runtime Support property on the Configuration Properties > Advanced page of the Property Pages dialog. Это свойство задает одновременно все прочие параметры средств, связанных со средой CLR.This property sets all the other CLR-related tool options at once.

Установка данного параметра компилятора программным способомTo set this compiler option programmatically

См. такжеSee also

Параметры компилятора КОМПИЛЯТОРОМ MSVCMSVC Compiler Options
Синтаксис Command-Line компилятора КОМПИЛЯТОРОМ MSVCMSVC Compiler Command-Line Syntax