Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Visual Studio héberge MSBuild pour charger et générer des projets managés. Étant donné que MSBuild est responsable du projet, presque n’importe quel projet au format MSBuild peut être utilisé avec succès dans Visual Studio, même si le projet a été créé par un autre outil et a un processus de génération personnalisé.
Cet article décrit des aspects spécifiques de l’hébergement MSBuild de Visual Studio qui doit être pris en compte lors de la personnalisation des projets et des fichiers .targets que vous souhaitez charger et générer dans Visual Studio. Celles-ci vous aideront à vous assurer que les fonctionnalités de Visual Studio telles qu’IntelliSense et le débogage fonctionnent pour votre projet personnalisé.
Pour plus d’informations sur les projets C++, consultez Les fichiers Project.
Extensions de nom de fichier projet
MSBuild.exe reconnaît toute extension de nom de fichier projet correspondant au modèle .*proj. Toutefois, Visual Studio reconnaît uniquement un sous-ensemble de ces extensions de nom de fichier projet, qui déterminent le système de projet spécifique au langage qui charge le projet. Visual Studio n’a pas de système de projet MSBuild neutre en langage.
Par exemple, le système de projet C# charge les fichiers .csproj , mais Visual Studio n’est pas en mesure de charger un fichier .xxproj . Un fichier projet pour les fichiers sources dans un langage arbitraire doit utiliser la même extension que les fichiers projet Visual Basic ou C# à charger dans Visual Studio.
L’extension *.msbuildproj est également prise en charge.
Noms cibles connus
Cliquez sur la commande Build dans Visual Studio pour exécuter la cible par défaut dans le projet. Souvent, cette cible est également nommée Build. Le choix de la commande Reconstruire ou Nettoyer visera à exécuter une cible du même nom dans le projet. Cliquez sur Publier pour exécuter une cible nommée PublishOnly dans le projet.
Configurations et plateformes
Les configurations sont représentées dans les projets MSBuild par propriétés regroupées dans un PropertyGroup élément qui contient un Condition attribut. Visual Studio examine ces conditions pour créer une liste de configurations et de plateformes de projet à afficher. Pour extraire correctement cette liste, les conditions doivent avoir un format similaire à ce qui suit :
Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' "
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "
Visual Studio examine les conditions sur PropertyGroup, ItemGroup, Import, propriété et éléments d’élément à cet effet.
Actions de génération supplémentaires
Visual Studio vous permet de modifier le nom de type d’élément d’un fichier dans un projet avec la propriété Action de génération de la fenêtre Propriétés du fichier .
Les noms de types d’éléments Compile, EmbeddedResource, Content et None sont toujours répertoriés dans ce menu, ainsi que d’autres noms de types d’éléments déjà dans votre projet. Pour vous assurer que tous les noms de types d’éléments personnalisés sont toujours disponibles dans ce menu, vous pouvez ajouter les noms à un type d’élément nommé AvailableItemName. Par exemple, l’ajout des éléments suivants à votre fichier projet ajoute le type personnalisé JScript à ce menu pour tous les projets qui l’importent :
<ItemGroup>
<AvailableItemName Include="JScript"/>
</ItemGroup>
L’ajout de noms de types d’éléments au AvailableItemName type d’élément entraîne l’affichage des éléments de ce type dans l’Explorateur de solutions.
Note
Certains noms de type d’élément sont spéciaux à Visual Studio, mais pas répertoriés dans cette liste déroulante.
Compilateurs intégrés au processus
Dans la mesure du possible, Visual Studio tente d’utiliser la version in-process du compilateur Visual Basic pour améliorer les performances. (Non applicable à C#.) Pour que cela fonctionne correctement, les conditions suivantes doivent être remplies :
Dans une cible du projet, il doit y avoir une tâche nommée
Vbcpour les projets Visual Basic.Le
UseHostCompilerIfAvailableparamètre de la tâche doit être défini sur true.
IntelliSense au moment du design
Pour obtenir la prise en charge d’IntelliSense dans Visual Studio avant qu’une build ait généré un assembly de sortie, les conditions suivantes doivent être remplies :
Il doit y avoir une cible nommée
Compile.La cible
Compileou l'une de ses dépendances doit appeler la tâche du compilateur pour le projet, telle queCscouVbc.La
Compilecible ou l’une de ses dépendances doit veiller à ce que le compilateur reçoive tous les paramètres nécessaires pour IntelliSense, notamment toutes les références.Les conditions répertoriées dans la section compilateurs in-process doivent être remplies .
Créer des solutions
Dans Visual Studio, le fichier de solution et l’ordre de génération de projet sont contrôlés par Visual Studio lui-même. Lors de la génération d’une solution avec msbuild.exe sur la ligne de commande, MSBuild analyse le fichier de solution et commande les builds du projet. Dans les deux cas, les projets sont générés individuellement dans l’ordre des dépendances, et les références de projet à projet ne sont pas parcourues. En revanche, lorsque des projets individuels sont générés avec msbuild.exe, les références de projet aux projets sont parcourues.
Lors de la génération à l’intérieur de Visual Studio, la propriété $(BuildingInsideVisualStudio) est définie sur true. Cela peut être utilisé dans vos fichiers projet ou .targets pour provoquer le comportement de la build différemment.
Afficher les propriétés et les éléments
Visual Studio reconnaît certains noms et valeurs de propriété. Par exemple, la propriété suivante dans un projet entraîne l’affichage de l’application Windows dans la zone Type d’application dans le Concepteur de projets.
<OutputType>WinExe</OutputType>
La valeur de propriété peut être modifiée dans le Concepteur de projets et enregistrée dans le fichier projet. Si une telle propriété reçoit une valeur non valide en modifiant manuellement, Visual Studio affiche un avertissement lorsque le projet est chargé et remplace la valeur non valide par une valeur par défaut.
Visual Studio comprend les valeurs par défaut pour certaines propriétés. Ces propriétés ne sont pas conservées dans le fichier projet, sauf si elles ont des valeurs non par défaut.
Les propriétés avec des noms arbitraires ne sont pas affichées dans Visual Studio. Pour modifier des propriétés arbitraires dans Visual Studio, vous devez ouvrir le fichier projet dans l’éditeur XML et les modifier manuellement. Pour plus d’informations, consultez la section Modifier les fichiers projet dans Visual Studio plus loin dans cette rubrique.
Les éléments définis dans le projet avec des noms de types d’éléments arbitraires sont affichés par défaut dans l’Explorateur de solutions sous leur nœud de projet. Pour masquer un élément de l’affichage, définissez les Visible métadonnées sur false. Par exemple, l’élément suivant participe au processus de génération, mais ne s’affiche pas dans l’Explorateur de solutions.
<ItemGroup>
<IntermediateFile Include="cache.temp">
<Visible>false</Visible>
</IntermediateFile>
</ItemGroup>
Note
Les métadonnées sont ignorées par Visible de solutions pour les projets C++. Les éléments seront toujours affichés, même si Visible est défini sur faux.
Les éléments déclarés dans les fichiers importés dans le projet ne sont pas affichés par défaut. Les éléments créés pendant le processus de génération ne sont jamais affichés dans l’Explorateur de solutions.
Conditions sur les éléments et les propriétés
Pendant une build, toutes les conditions sont entièrement respectées.
Lors de la détermination des valeurs de propriété à afficher, les propriétés que Visual Studio considère comme dépendantes de la configuration sont évaluées différemment des propriétés qu’elle considère comme indépendantes de la configuration. Pour les propriétés considérées comme dépendantes de la configuration, Visual Studio définit les propriétés Configuration de manière appropriée et commande à MSBuild de réévaluer le projet. Pour les propriétés qu’elle considère comme indépendantes de la configuration, il est indéterminé comment les conditions seront évaluées.
Les expressions conditionnelles sur les éléments sont toujours ignorées pour déterminer si l’élément doit être affiché dans l’Explorateur de solutions.
Débogage
Pour rechercher et lancer l’assembly de sortie et attacher le débogueur, Visual Studio a besoin des propriétés OutputPath, AssemblyName et OutputType correctement définies. Le débogueur ne parvient pas à s’attacher si le processus de génération n'a pas conduit le compilateur à générer un fichier .pdb.
Exécution cible en phase de conception
Visual Studio tente d’exécuter des cibles avec certains noms lorsqu’il charge un projet. Ces cibles incluent Compile, , ResolveAssemblyReferencesResolveCOMReferences, GetFrameworkPaths, et CopyRunEnvironmentFiles. Visual Studio exécute ces cibles afin que le compilateur puisse être initialisé pour fournir IntelliSense, le débogueur peut être initialisé et les références affichées dans l’Explorateur de solutions peuvent être résolues. Si ces cibles ne sont pas présentes, le projet charge et génère correctement, mais l’expérience au moment du design dans Visual Studio ne sera pas entièrement fonctionnelle.
Modifier des fichiers projet dans Visual Studio
Pour modifier directement un projet MSBuild, vous pouvez ouvrir le fichier projet dans l’éditeur XML Visual Studio.
Pour décharger et modifier un fichier projet dans Visual Studio
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis choisissez Décharger le projet.
Le projet est marqué (indisponible).
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet indisponible, puis choisissez Modifier <le fichier> projet.
Le fichier projet s’ouvre dans Visual Studio XML Editor.
Modifiez, enregistrez, puis fermez le fichier projet.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet indisponible, puis choisissez Recharger le projet.
IntelliSense et validation
Lorsque vous utilisez l’éditeur XML pour modifier des fichiers projet, IntelliSense et la validation sont pilotés par les fichiers de schéma MSBuild. Celles-ci sont installées dans le cache de schéma, qui se trouve dans le <répertoire> d’installation de Visual Studio\Xml\Schemas\1033\MSBuild.
Les types MSBuild principaux sont définis dans Microsoft.Build.Core.xsd et les types courants utilisés par Visual Studio sont définis dans Microsoft.Build.CommonTypes.xsd. Pour personnaliser les schémas afin que vous ayez IntelliSense et la validation pour les noms de types d’éléments personnalisés, les propriétés et les tâches, vous pouvez modifier Microsoft.Build.xsd ou créer votre propre schéma qui inclut les schémas CommonTypes ou Core. Si vous créez votre propre schéma, vous devez diriger l’éditeur XML pour le trouver à l’aide de la fenêtre Propriétés .
Modifier les fichiers projet chargés
Visual Studio met en cache le contenu des fichiers projet et des fichiers importés par ces derniers. Si vous modifiez un fichier projet chargé, Visual Studio vous invite automatiquement à recharger le projet afin que les modifications prennent effet. Toutefois, si vous modifiez un fichier importé par un projet chargé, il n’y aura pas d’invite de rechargement et vous devez décharger et recharger manuellement le projet pour apporter les modifications.
Groupes de sortie
Plusieurs cibles définies dans Microsoft.Common.targets ont des noms se terminant par OutputGroups ou OutputGroupDependencies. Visual Studio appelle ces cibles pour obtenir des listes spécifiques de sorties de projet. Par exemple, la SatelliteDllsProjectOutputGroup cible crée une liste de tous les assemblys satellites qu’une build crée. Ces groupes de sortie sont utilisés par des fonctionnalités telles que la publication, le déploiement et les références d'un projet à l'autre. Les projets qui ne les définissent pas seront chargés et générés dans Visual Studio, mais certaines fonctionnalités peuvent ne pas fonctionner correctement.
Résolution de référence
La résolution de référence est le processus d’utilisation des éléments de référence stockés dans un fichier projet pour localiser les assemblies réels. Visual Studio doit déclencher la résolution de référence pour afficher les propriétés détaillées de chaque référence dans la fenêtre Propriétés . La liste suivante décrit les trois types de références et la façon dont elles sont résolues.
Références d’assembly :
Le système de projet appelle une cible portant le nom bien connu
ResolveAssemblyReferences. Cette cible doit produire des éléments portant le nomReferencePathdu type d’élément. Chacun de ces éléments doit avoir une spécification d’élément (la valeur de l’attributIncluded’un élément) contenant le chemin d’accès complet à la référence. Les éléments doivent avoir toutes les métadonnées des éléments d’entrée transmis en plus des nouvelles métadonnées suivantes :CopyLocal, indiquant si l’assembly doit être copié dans le dossier de sortie, défini sur true ou false.OriginalItemSpec, contenant la spécification originale de l'élément de référence.ResolvedFrom, défini sur « {TargetFrameworkDirectory} » s’il a été résolu à partir du répertoire .NET Framework.
Références COM :
Le système de projet appelle une cible avec le nom bien connu
ResolveCOMReferences. Cette cible doit produire des éléments portant le nomComReferenceWrappersdu type d’élément. Chacun de ces éléments doit avoir une spécification d’élément contenant le chemin d’accès complet à l’assembly d’interopérabilité pour la référence COM. Les éléments doivent avoir toutes les métadonnées des éléments d’entrée transmis, en plus des nouvelles métadonnées portant le nomCopyLocal, indiquant si l’assembly doit être copié dans le dossier de sortie, défini sur true ou false.Références natives
Le système de projet appelle une cible bien connue sous le nom de
ResolveNativeReferences. Cette cible doit produire des éléments portant le nomNativeReferenceFiledu type d’élément. Les éléments doivent avoir toutes les métadonnées des éléments d’entrée transmis, en plus d’un nouvel élément de métadonnées nomméOriginalItemSpec, contenant la spécification d’élément d’origine de la référence.
Raccourcis de performances
Si vous utilisez l’IDE Visual Studio pour démarrer le débogage (en choisissant la touche F5 ou en choisissant Démarrer> ledébogage dans la barre de menus) ou pour générer votre projet (par exemple, Générer> lasolution), le processus de génération utilise une vérification de mise à jour rapide pour améliorer les performances. Dans certains cas où les builds personnalisées créent des fichiers qui sont intégrés à leur tour, la vérification de la mise à jour rapide n’identifie pas correctement les fichiers modifiés. Les projets nécessitant des vérifications de mise à jour plus approfondies peuvent désactiver la vérification rapide en définissant la variable DISABLEFASTUPTODATECHECK=1d’environnement. Les projets peuvent également définir cette propriété en tant que propriété MSBuild dans le projet ou dans un fichier importé par le projet.