Avantages de/clr: pur
meilleure performance: Parce que pures assemblées ne contiennent que MSIL, il n'y a pas des fonctions natives, et donc pas de transitions non gérés/managed sont nécessaires. (Les appels de fonction effectués via P/Invoke font exception à cette règle.)
AppDomain Awareness: Les fonctions managées et les types de données CLR existent dans les domaines d'application, ce qui affecte leur visibilité et leur accessibilité.Les assemblages purs sont sensibles au domaine (__declspec (appdomain) est implicite pour chaque type). L'accès à leurs types et fonctionnalités à partir d'autres composants .NET est donc plus facile et plus sûr. Par conséquent, les assemblages purs interagissent plus facilement avec d'autres composants .NET qu'avec des assemblages mixtes.
Chargement sans disque: Les assemblages purs peuvent être chargés en mémoire et même en continu. Ceci est essentiel pour utiliser les assemblys .NET en tant que procédures stockées. Cela diffère des assemblages mixtes, qui en raison d'une dépendance sur les mécanismes de chargement de Windows, doivent exister sur le disque pour s'exécuter. Réflexion: Il n'est pas possible de réfléchir sur des exécutables mixtes, alors que les assemblages purs fournissent un support de réflexion complet. Pour plus d'informations, voir Reflection (C++/CLI). Contrôlabilité de l'hôte: Comme les assemblages purs ne contiennent que du MSIL, ils se comportent de manière plus prévisible et plus flexible que les assemblages mixtes lorsqu'ils sont utilisés dans des applications qui hébergent le CLR et modifient son comportement par défaut.
Limites de/clr: pur
Cette section couvre les fonctionnalités pas pris en charge par/clr: pure.
Les assemblages purs ne peuvent pas être appelés par des fonctions non gérées. Par conséquent, les assemblys purs ne peuvent pas implémenter des interfaces COM ou exposer des rappels natifs. Les assemblages purs ne peuvent pas exporter de fonctions via les fichiers __declspec (dllexport) ou .DEF. De même, les fonctions déclarées avec la convention __clrcall ne peuvent pas être importées via __declspec (dllimport). Les fonctions d'un module natif peuvent être appelées à partir d'un assemblage pur, mais les assemblages purs ne peuvent pas exposer les fonctions appelables natives. La fonctionnalité d'exposition dans un assemblage pur doit donc être effectuée via des fonctions managées dans un assemblage mixte. Voir Comment: migrer vers/clr: pure (C++/CLI) pour plus d'informations.
Les bibliothèques ATL et MFC ne sont pas prises en charge par la compilation en mode pur dans Visual C++.
Les .netmodules purs ne sont pas acceptés en tant qu'entrée dans le lieur Visual C++. Cependant, les fichiers .obj purs sont acceptés par l'éditeur de liens, et les fichiers .obj contiennent un surensemble d'informations contenues dans netmodules. Voir Fichiers .netmodule en tant qu'entrée de lieur pour plus d'informations.
La prise en charge COM du compilateur (#import) n'est pas prise en charge, car cela introduirait des instructions non gérées dans l'assembly pur.
Les options de virgule flottante pour l'alignement et la gestion des exceptions ne sont pas réglables pour les assemblages purs. Par conséquent, __declspec (align) ne peut pas être utilisé. Cela rend certains fichiers d'en-tête, tels que fpieee.h, incompatible avec/clr: pure.
La fonction GetLastError dans le PSDK peut donner un comportement indéfini lors de la compilation avec/clr: pure.