Partager via


CL, tâche

Encapsule l'outil de compilateur de Visual C++, cl.exe. Le compilateur produit des fichiers exécutables (.exe), des bibliothèques de liens dynamiques (.dll) ou des modules de code (. fichiers .netmodule) Pour plus d'informations, consultez Options du compilateur.

Paramètres

Le tableau suivant décrit les paramètres de la tâche CL. La plupart des paramètres de tâche, et quelques jeux de paramètres, correspondent à une option de ligne de commande.

Paramètre

Description

AdditionalIncludeDirectories

Paramètre String[] facultatif.

Ajoute un répertoire à la liste des répertoires dans lesquels sont recherchés des fichiers Include.

Pour plus d'informations, consultez /I (Autres répertoires Include).

AdditionalOptions

Paramètre String facultatif.

Liste d'options de ligne de commande. Par exemple, "/option1 /option2 /option#". Utilisez ce paramètre pour spécifier des options de ligne de commande qui ne sont pas représentées par tout autre paramètre de tâche.

Pour plus d'informations, consultez Options du compilateur.

AdditionalUsingDirectories

Paramètre String[] facultatif.

Spécifie un répertoire que le compilateur doit explorer en vue de résoudre les références de fichiers passées à la directive #using.

Pour plus d'informations, consultez /AI (Spécifier les répertoires des métadonnées).

AlwaysAppend

Paramètre String facultatif.

Chaîne qui toujours est émise sur la ligne de commande. Sa valeur par défaut est « /c ».

AssemblerListingLocation

Crée un fichier liste qui contient le code assembleur.

Pour plus d'informations, consultez l'option /Fa dans /FA, /Fa (Fichier listing).

AssemblerOutput

Paramètre String facultatif.

Crée un fichier liste qui contient le code assembleur.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

NoListing

<aucune>

AssemblyCode

/FA

AssemblyAndMachineCode

/FAc

AssemblyAndSourceCode

/FAs

All

/FAcs

Pour plus d'informations, consultez les options /FA, /FAc, /FAs et /FAcs dans /FA, /Fa (Fichier listing).

BasicRuntimeChecks

Paramètre String facultatif.

Active et désactive la fonctionnalité de vérification des erreurs d'exécution, conjointement au pragma runtime_checks.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Default

<aucune>

StackFrameRuntimeCheck

/RTCs

UninitializedLocalUsageCheck

/RTCu

EnableFastChecks

/RTC1

Pour plus d'informations, consultez /RTC (Vérifications des erreurs au moment de l'exécution).

BrowseInformation

Paramètre Boolean facultatif.

Si true, crée un fichier d'informations de navigation.

Pour plus d'informations, consultez l'option /FR dans /FR, /Fr (Créer un fichier .sbr).

BrowseInformationFile

Paramètre String facultatif.

Spécifie un nom de fichier pour le fichier d'informations de consultation.

Pour plus d'informations, consultez le paramètre BrowseInformation dans ce tableau et consultez également /FR, /Fr (Créer un fichier .sbr).

BufferSecurityCheck

Paramètre Boolean facultatif.

Si true, détecte des dépassements de mémoire tampon qui remplacent l'adresse de retour, une technique courante pour l'exploitation de code qui ne met pas en vigueur les restrictions de taille de mémoire tampon.

Pour plus d'informations, consultez /GS (Vérification de la sécurité de la mémoire tampon).

BuildingInIDE

Paramètre Boolean facultatif.

Si true, indique que MSBuild est appelé par l'IDE. Sinon, MSBuild est appelé sur la ligne de commande.

CallingConvention

Paramètre String facultatif.

Spécifie la convention d'appel qui détermine l'ordre dans lequel les arguments de fonction font l'objet d'un push dans la pile, indique si la fonction d'appelant ou la fonction appelée supprime les arguments de la pile à la fin de l'appel, et spécifie la convention de décoration de nom que le compilateur utilise pour identifier des fonctions individuelles.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Cdecl

/Gd

FastCall

/Gr

StdCall

/Gz

Pour plus d'informations, consultez /Gd, /Gr, /Gv, /Gz (Convention d'appel).

CompileAs

Paramètre String facultatif.

Spécifie si le fichier d'entrée doit être compilé sous forme de fichier source C ou C++.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Default

<aucune>

CompileAsC

/TC

CompileAsCpp

/TP

Pour plus d'informations, consultez /Tc, /Tp, /TC, /TP (Spécifier le type de fichier source).

CompileAsManaged

Paramètre String facultatif.

Permet aux applications et aux composants d'utiliser les fonctionnalités du Common Language Runtime (CLR).

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

false

<aucune>

true

/clr

Pure

/clr:pure

Safe

/clr:safe

OldSyntax

/clr:oldSyntax

Pour plus d'informations, consultez /clr (Compilation pour le Common Language Runtime).

CreateHotpatchableImage

Paramètre Boolean facultatif.

Si true, indique au compilateur de préparer une image pour la mise à jour corrective chaude. Ce paramètre vérifie que la première instruction de chaque fonction est codée sur deux octets, ce qui correspond aux exigences pour la mise à jour corrective.

Pour plus d'informations, consultez /hotpatch (Créer une image corrigeable en mémoire).

DebugInformationFormat

Paramètre String facultatif.

Sélectionne le type des informations de débogage générées par votre programme et si ces informations sont stockées dans des fichiers objets (.obj) ou dans une base de données du programme (PDB).

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

OldStyle

/Z7

ProgramDatabase

/Zi

EditAndContinue

/ZI

Pour plus d'informations, consultez /Z7, /Zi, /ZI (Format des informations de débogage).

DisableLanguageExtensions

Paramètre Boolean facultatif.

Si true, indique au compilateur d'émettre une erreur pour les constructions de langage qui ne sont pas compatibles avec ANSI C ou ANSI C++.

Pour plus d'informations, consultez l'option /Za dans /Za, /Ze (Désactiver les extensions de langage).

DisableSpecificWarnings

Paramètre String[] facultatif.

Désactive les numéros d'avertissement spécifiés dans une liste délimitée par des points-virgules.

Pour plus d'informations, consultez l'option /wd dans /w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won (Niveau d'avertissement).

EnableEnhancedInstructionSet

Paramètre String facultatif.

Spécifie l'architecture de génération de code qui utilise les instructions des extensions Streaming SIMD (SSE) et Streaming SIMD 2 (SSE2).

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

StreamingSIMDExtensions

/arch:SSE

StreamingSIMDExtensions2

/arch:SSE2

Pour plus d'informations, consultez /arch (x86).

EnableFiberSafeOptimizations

Paramètre Boolean facultatif.

Si true, prend en charge la sécurité de fibre pour les données allouées à l'aide du stockage local de thread statique, autrement dit, les données allouées à l'aide de __declspec(thread).

Pour plus d'informations, consultez /GT (Prendre en charge le stockage local des threads avec fibres sécurisées).

EnablePREfast

Paramètre Boolean facultatif.

Si true, permet l'analyse du code.

Pour plus d'informations, consultez /analyze (analyse de code).

ErrorReporting

Paramètre String facultatif.

Vous permet de fournir les informations d'erreur interne du compilateur (Internal Compiler Error ou ICE) directement à Microsoft. Par défaut, le paramètre dans les générations IDE est Prompt et le paramètre dans les générations par ligne de commande est Queue.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

None

/errorReport:none

Prompt

/errorReport:prompt

Queue

/errorReport:queue

Send

/errorReport:send

Pour plus d'informations, consultez /errorReport (Signaler les erreurs internes du compilateur).

ExceptionHandling

Paramètre String facultatif.

Spécifie le modèle de gestion des exceptions devant être utilisé par le compilateur.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

false

<aucune>

Async

/EHa

Sync

/EHsc

SyncCThrow

/EHs

Pour plus d'informations, consultez /EH (Modèle de gestion des exceptions).

ExpandAttributedSource

Paramètre Boolean facultatif.

Si true, crée un fichier liste qui a des attributs développés injectés dans le fichier source.

Pour plus d'informations, consultez /Fx (Fusionner le code injecté).

FavorSizeOrSpeed

Paramètre String facultatif.

Spécifie s'il convient de privilégier la taille ou la vitesse du code.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Neither

<aucune>

Size

/Os

Speed

/Ot

Pour plus d'informations, consultez /Os, /Ot (Favoriser la taille du code, Favoriser la vitesse du code).

FloatingPointExceptions

Paramètre Boolean facultatif.

Si true, active le modèle d'exception de virgule flottante fiable. Les exceptions sont immédiatement levées après leur déclenchement.

Pour plus d'informations, consultez l'option /fp:except dans /fp (Spécifier le comportement de virgule flottante).

FloatingPointModel

Paramètre String facultatif.

Définit le modèle de virgule flottante.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Precise

/fp:precise

Strict

/fp:strict

Fast

/fp:fast

Pour plus d'informations, consultez /fp (Spécifier le comportement de virgule flottante).

ForceConformanceInForLoopScope

Paramètre Boolean facultatif.

Si true, implémente le comportement C++ standard dans les boucles for qui utilisent des extensions Microsoft (/Ze).

Pour plus d'informations, consultez /Zc:forScope (Forcer la conformité à la portée de la boucle for).

ForcedIncludeFiles

Paramètre String[] facultatif.

Provoque que le préprocesseur traite un ou plusieurs fichiers d'en-tête spécifiés.

Pour plus d'informations, consultez /FI (Nom du fichier Include imposé).

ForcedUsingFiles

Paramètre String[] facultatif.

Entraîne le traitement par le préprocesseur d'un ou plusieurs fichiers #using spécifiés.

Pour plus d'informations, consultez /FU (Nom du fichier #using imposé).

FunctionLevelLinking

Paramètre Boolean facultatif.

Si true, permet au compilateur d'empaqueter des fonctions individuelles sous forme de fonctions empaquetées (COMDAT).

Pour plus d'informations, consultez /Gy (Activer la liaison au niveau des fonctions).

GenerateXMLDocumentationFiles

Paramètre Boolean facultatif.

Si true, le compilateur traite des commentaires sur la documentation dans les fichiers de code source et crée un fichier .xdc pour chaque fichier de code source qui a des commentaires sur la documentation.

Pour plus d'informations, consultez /doc (Traiter les commentaires de documentation) (C/C++). Consultez également le paramètre XMLDocumentationFileName dans ce tableau.

IgnoreStandardIncludePath

Paramètre Boolean facultatif.

Si true, empêche le compilateur de rechercher des fichiers Include dans les répertoires spécifiés dans les variables d'environnement PATH et INCLUDE.

Pour plus d'informations, consultez /X (Ignorer les chemins d'accès Include standard).

InlineFunctionExpansion

Paramètre String facultatif.

Spécifie le niveau d'expansion des fonctions inline de la build.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Default

<aucune>

Disabled

/Ob0

OnlyExplicitInline

/Ob1

AnySuitable

/Ob2

Pour plus d'informations, consultez /Ob (Expansion des fonctions Inline).

IntrinsicFunctions

Paramètre Boolean facultatif.

Si true, remplace certains appels de fonction par des formes intrinsèques ou d'autres formes spéciales de la fonction permettant à votre application de s'exécuter plus vite.

Pour plus d'informations, consultez /Oi (Générer des fonctions intrinsèques).

MinimalRebuild

Paramètre Boolean facultatif.

Si true, active une régénération minimale, qui détermine si des fichiers source C++ qui incluent des fichiers de définitions de classe modifiés (stockés dans les fichiers d'en-tête (.h)) doivent être recompilés.

Pour plus d'informations, consultez /Gm (Activer la régénération minimale).

MultiProcessorCompilation

Paramètre Boolean facultatif.

Si true, utilise plusieurs processeurs à compiler. Ce paramètre crée un processus pour chaque processeur effectif sur votre ordinateur.

Pour plus d'informations, consultez /MP (Générer avec plusieurs processus). Consultez également le paramètre ProcessorNumber dans ce tableau.

ObjectFileName

Paramètre String facultatif.

Spécifie un nom de substitution pour le nom de fichier (.obj) ou de répertoire par défaut.

Pour plus d'informations, consultez /Fo (Nom de fichier objet).

ObjectFiles

Paramètre String[] facultatif.

Liste de fichiers objets.

OmitDefaultLibName

Paramètre Boolean facultatif.

Si true, omet le nom de bibliothèque Runtime C par défaut du fichier objet (.obj). Par défaut, le compilateur place le nom de la bibliothèque dans le fichier .obj afin de diriger l'éditeur de liens vers la bibliothèque appropriée.

Pour plus d'informations, consultez /Zl (Omettre le nom de la bibliothèque par défaut).

OmitFramePointers

Paramètre Boolean facultatif.

Si true, supprime la création de pointeurs frame sur la pile des appels.

Pour plus d'informations, consultez /Oy (Omission du pointeur frame).

OpenMPSupport

Paramètre Boolean facultatif.

Si true, le compilateur traite les clauses et les directives OpenMP.

Pour plus d'informations, consultez /openmp (Activer la prise en charge OpenMP 2.0).

Optimization

Paramètre String facultatif.

Spécifie différentes optimisations de code pour la vitesse et la taille.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Disabled

/Od

MinSpace

/O1

MaxSpeed

/O2

Full

/Ox

Pour plus d'informations, consultez /O (Optimiser le code), options.

PrecompiledHeader

Paramètre String facultatif.

Créez ou utilisez un fichier d'en-tête précompilé (.pch) pendant la génération.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

NotUsing

<aucune>

Create

/Yc

Use

/Yu

Pour plus d'informations, consultez /Yc (Créer un fichier d'en-tête précompilé) et /Yu (Utiliser un fichier d'en-tête précompilé). De plus, consultez les paramètres PrecompiledHeaderFile et PrecompiledHeaderOutputFile dans ce tableau.

PrecompiledHeaderFile

Paramètre String facultatif.

Spécifie un nom de fichier d'en-tête précompilé à créer ou utiliser.

Pour plus d'informations, consultez /Yc (Créer un fichier d'en-tête précompilé) et /Yu (Utiliser un fichier d'en-tête précompilé).

PrecompiledHeaderOutputFile

Paramètre String facultatif.

Spécifie un nom de chemin d'accès pour un en-tête précompilé au lieu d'utiliser le nom de chemin d'accès par défaut.

Pour plus d'informations, consultez /Fp (Nom de fichier .pch).

PreprocessKeepComments

Paramètre Boolean facultatif.

Si true, conserve les commentaires pendant le prétraitement.

Pour plus d'informations, consultez /C (Conserver les commentaires pendant le prétraitement).

PreprocessorDefinitions

Paramètre String[] facultatif.

Définit un symbole de prétraitement pour votre fichier source.

Pour plus d'informations, consultez /D (Définitions de préprocesseur).

PreprocessOutput

Paramètre ITaskItem[] facultatif.

Définit un tableau d'éléments de sortie de préprocesseur qui peuvent être consommés et peuvent être émis par les tâches.

PreprocessOutputPath

Paramètre String facultatif.

Spécifie le nom du fichier de sortie dans lequel le paramètre PreprocessToFile écrit la sortie prétraitée.

Pour plus d'informations, consultez /Fi (prétraiter le nom du fichier de sortie).

PreprocessSuppressLineNumbers

Paramètre Boolean facultatif.

Si true, prétraite des fichiers sources C et C++ et copie les fichiers prétraités vers le périphérique de sortie standard.

Pour plus d'informations, consultez /EP (Prétraiter dans stdout sans directive #line).

PreprocessToFile

Paramètre Boolean facultatif.

Si true, prétraite des fichiers source C et C++ et copie la sortie prétraitée dans un fichier.

Pour plus d'informations, consultez /P (Prétraiter jusqu'à un fichier).

ProcessorNumber

Paramètre Integer facultatif.

Spécifie le nombre maximal de processeurs à utiliser dans une compilation multiprocesseur. Utilisez ce paramètre en association avec le paramètre MultiProcessorCompilation.

ProgramDataBaseFileName

Paramètre String facultatif.

Spécifie un nom de fichier pour le fichier de base de données de programme (PDB).

Pour plus d'informations, consultez /Fd (Nom de fichier PDB).

RuntimeLibrary

Paramètre String facultatif.

Indique si un module multithread est une DLL, et sélectionne les versions retail ou debug de la bibliothèque Runtime.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

MultiThreaded

/MT

MultiThreadedDebug

/MTd

MultiThreadedDLL

/MD

MultiThreadedDebugDLL

/MDd

Pour plus d'informations, consultez /MD, /MT, /LD (Utiliser la bibliothèque Runtime).

RuntimeTypeInfo

Paramètre Boolean facultatif.

Si true, ajoute le code pour vérifier les types d'objet C++ au moment de l'exécution (informations de type d'exécution).

Pour plus d'informations, consultez /GR (Activer les informations de type au moment de l'exécution).

ShowIncludes

Paramètre Boolean facultatif.

Si true, la sortie du compilateur est une liste des fichiers Include.

Pour plus d'informations, consultez /showIncludes (Liste des fichiers Include).

SmallerTypeCheck

Paramètre Boolean facultatif.

Si true, signale une erreur d'exécution si une valeur est assignée à un plus petit type de données et provoque une perte de données.

Pour plus d'informations, consultez l'option /RTCc dans /RTC (Vérifications des erreurs au moment de l'exécution).

Sources

Paramètre ITaskItem[] obligatoire.

Spécifie une liste de fichiers sources séparés par des espaces.

StringPooling

Paramètre Boolean facultatif.

Si true, permet au compilateur de créer une copie de chaînes identiques dans l'image de programme.

Pour plus d'informations, consultez /GF (Supprimer les doublons).

StructMemberAlignment

Paramètre String facultatif.

Spécifie l'alignement des octets pour tous les membres d'une structure.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

Default

/Zp1

1Byte

/Zp1

2Bytes

/Zp2

4Bytes

/Zp4

8Bytes

/Zp8

16Bytes

/Zp16

Pour plus d'informations, consultez /Zp (Alignement des membres de la structure).

SuppressStartupBanner

Paramètre Boolean facultatif.

Si true, empêche l'affichage du copyright et du numéro de version lorsque la tâche démarre.

Pour plus d'informations, consultez /nologo (Suppression de la bannière de démarrage) (C/C++).

TrackerLogDirectory

Paramètre String facultatif.

Spécifie le répertoire intermédiaire où les journaux de Tracker de cette tâche sont stockés.

Pour plus d'informations, consultez les paramètres TLogReadFiles et TLogWriteFiles dans ce tableau.

TreatSpecificWarningsAsErrors

Paramètre String[] facultatif.

Traite la liste spécifiée d'avertissements du compilateur comme des erreurs.

Pour plus d'informations, consultez l'option /wen dans /w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won (Niveau d'avertissement).

TreatWarningAsError

Paramètre Boolean facultatif.

Si true, traite tous les avertissements du compilateur comme erreurs.

Pour plus d'informations, consultez l'option /WX dans /w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won (Niveau d'avertissement).

TreatWChar_tAsBuiltInType

Paramètre Boolean facultatif.

Si true, traite le type wchar_t comme un type natif.

Pour plus d'informations, consultez /Zc:wchar_t (wchar_t est un type natif).

UndefineAllPreprocessorDefinitions

Paramètre Boolean facultatif.

Si true, annule la définition des symboles spécifiques à Microsoft que le compilateur définit.

Pour plus d'informations, consultez l'option /u dans /U, /u (Annuler la définition de symboles).

UndefinePreprocessorDefinitions

Paramètre String[] facultatif.

Spécifie une liste composée d'un ou de plusieurs symboles de préprocesseur dont la définition doit être annulée.

Pour plus d'informations, consultez l'option /U dans /U, /u (Annuler la définition de symboles).

UseFullPaths

Paramètre Boolean facultatif.

Si true, affiche le chemin d'accès complet des fichiers de code source passés au compilateur dans le diagnostic.

Pour plus d'informations, consultez /FC (Chemin d'accès complet du fichier de code source dans les diagnostics).

UseUnicodeForAssemblerListing

Paramètre Boolean facultatif.

Si true, le fichier de sortie est créé au format UTF-8.

Pour plus d'informations, consultez l'option /FAu dans /FA, /Fa (Fichier listing).

WarningLevel

Paramètre String facultatif.

Spécifie le niveau d'avertissement le plus élevé devant être généré par le compilateur.

Spécifiez l'une des valeurs suivantes, chacune d'elles correspond à une option de ligne de commande.

Valeur

Option de ligne de commande

TurnOffAllWarnings

/W0

Level1

/W1

Level2

/W2

Level3

/W3

Level4

/W4

EnableAllWarnings

/Wall

Pour plus d'informations, consultez l'option /Wn dans /w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won (Niveau d'avertissement).

WholeProgramOptimization

Paramètre Boolean facultatif.

Si true active l'optimisation de l'ensemble du programme.

Pour plus d'informations, consultez /GL (Optimisation de l'ensemble du programme).

XMLDocumentationFileName

Paramètre String facultatif.

Spécifie le nom des fichiers de documentation XML générés. Ce paramètre peut être un nom de fichier ou de répertoire.

Pour plus d'informations, consultez l'argument name dans /doc (Traiter les commentaires de documentation) (C/C++). Consultez également le paramètre GenerateXMLDocumentationFiles dans ce tableau.

MinimalRebuildFromTracking

Paramètre Boolean facultatif.

Si true, une génération incrémentielle suivie est exécutée; si false, une régénération est exécutée.

TLogReadFiles

Paramètre ITaskItem[] facultatif.

Spécifie un tableau des éléments qui représentent les journaux de suivi de lecture.

Un journal de suivi pour les fichiers en lecture (.tlog) contient les noms des fichiers d'entrée qui sont lus par une tâche, et est utilisé par le système de génération de projet pour prendre en charge les générations incrémentielles. Pour plus d'informations, consultez les paramètres TrackerLogDirectory et TrackFileAccess dans ce tableau.

TLogWriteFiles

Paramètre ITaskItem[] facultatif.

Spécifie un tableau des éléments qui représentent les journaux de suivi d'écriture.

Un journal de suivi pour les fichiers en écriture (.tlog) contient les noms des fichiers de sortie qui sont écrits par une tâche, et est utilisé par le système de génération de projet pour prendre en charge les générations incrémentielles. Pour plus d'informations, consultez les paramètres TrackerLogDirectory et TrackFileAccess dans ce tableau.

TrackFileAccess

Paramètre Boolean facultatif.

Si true, suit des modèles d'accès au fichier.

Pour plus d'informations, consultez les paramètres TLogReadFiles et TLogWriteFiles dans ce tableau.

Voir aussi

Autres ressources

Référence des tâches MSBuild