46 votes

Comment appeler la version de MSBuild de Visual Studio 2017 RC à partir d'un fichier BAT?

Les versions antérieures de MSBuild peut être trouvé ici: %programfiles(x86)%\msbuild\<version>\bin\msbuild.exe.

Mais pour Visual Studio 2017RC le chemin est - %programfiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe. Le type de l'installation: enteprise, communautaire, ou professionnel, semble faire partie de la trajectoire. Et qui les rend difficiles à spécifier le chemin d'accès correct à msbuild dans un fichier BAT qui doit travailler sur plusieurs ordinateurs différents avec différentes versions de Visual Studio 2017.

Quel est le meilleur moyen pour appeler Visual Studio 2017 RC de la version de Msbuild à partir d'un fichier bat? Ou à partir de PowerShell?

25voto

Jimmy Points 7473

Les prises en charge

VS2017 de l'installation d'un moteur interop API qui permet d'interroger les informations sur l'instance(s) de VS2017 sont installés. Il y a un package NuGet , et encore un exemple de la façon de requête, y compris le chemin d'installation. Pour la consommation d'un lot ou d'une PS fichier, vous pourriez juste réécrire l'exemple d'application et de l'appeler à partir de votre script pour afficher les informations dont vous avez besoin.

La non prise en charge de manière

Le VS moteur d'installation tient un magasin de données en vertu de l' %ProgramData%\Microsoft\VisualStudio\Packages\_Instances. Il y aura un dossier pour chaque instance de VS2017, et à l'intérieur de ce dossier est un state.json le fichier qui contient des informations sur l'installation, y compris le chemin d'installation.

Puisque vous avez besoin d'extraire les infos de la .fichier json, vous avez la possibilité soit de créer une application que vous appelez à partir de votre fichier de script, ou venir avec une logique d'analyse directement dans votre script. Ce sera évidemment fragile que le JSON schema ou l'emplacement du fichier peut changer.

La force brute de la méthode

En supposant que vous utilisez le chemin d'installation par défaut, vous pouvez simplement recherche de manière récursive pour msbuild.exe en vertu de l' %ProgramFiles(x86)%\Microsoft Visual Studio\ (il semble qu'il y aura 32-bit et 64-bit msbuild.exe pour chaque VS exemple). Ce serait probablement le plus facile à faire dans votre fichier de script, mais il compte sur le chemin d'installation par défaut (ou quel que soit codé en dur chemin d'accès que vous souhaitez rechercher en vertu de l').

Changer votre environnement de dev exigences

La dernière chose que vous pourriez faire, c'est d'exiger que les devs utilisent (ou en quelque sorte appeler) l' vsdevcmd.bat à utiliser le VS environnement de dev. Cela permettra d'obtenir MSBuild, et en plus de tous les autres outils de la VS environnement, sur leur %PATH%. C'est une exigence sur votre équipe, mais ce sera toujours officiellement prise en charge moyen de trouver msbuild.exe.

18voto

Arve Points 3665

Microsoft a créé un outil permettant de localiser Visual Studio 2017 et les versions plus récentes https://github.com/Microsoft/vswhere.

Cette option et les plus récentes sont décrites dans cet article de blog.

8voto

Chris McKee Points 1133

La manière la plus simple...

Right at the bottom of the download page on VS

  • Résultat; les outils de construction permettra d'installer à un autre endroit c'est la norme partout, partout, de l'installer quelle que soit votre VS SKU (professionnel / entreprise / de la communauté de tous les installer sur des chemins différents)
  • Nouvel emplacement C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe

8voto

alastairtree Points 76

Publier ceci pour les personnes qui tentent toujours de localiser la dernière version de msbuild sur une machine et de revenir à une version plus ancienne si celle-ci est disponible. Je trouve que cet extrait de powershell fait l'affaire, ce qui peut facilement être invoqué à partir d'un fichier chauve-souris .

 Function Find-MsBuild([int] $MaxVersion = 2017)
{
    $agentPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe"
    $devPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe"
    $proPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe"
    $communityPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
    $fallback2015Path = "${Env:ProgramFiles(x86)}\MSBuild\14.0\Bin\MSBuild.exe"
    $fallback2013Path = "${Env:ProgramFiles(x86)}\MSBuild\12.0\Bin\MSBuild.exe"
    $fallbackPath = "C:\Windows\Microsoft.NET\Framework\v4.0.30319"

    If ((2017 -le $MaxVersion) -And (Test-Path $agentPath)) { return $agentPath } 
    If ((2017 -le $MaxVersion) -And (Test-Path $devPath)) { return $devPath } 
    If ((2017 -le $MaxVersion) -And (Test-Path $proPath)) { return $proPath } 
    If ((2017 -le $MaxVersion) -And (Test-Path $communityPath)) { return $communityPath } 
    If ((2015 -le $MaxVersion) -And (Test-Path $fallback2015Path)) { return $fallback2015Path } 
    If ((2013 -le $MaxVersion) -And (Test-Path $fallback2013Path)) { return $fallback2013Path } 
    If (Test-Path $fallbackPath) { return $fallbackPath } 

    throw "Yikes - Unable to find msbuild"
}


$msbuildPath = Find-MsBuild 2017
 

4voto

cloudstrifebro Points 272

Maintenant que VS 2017 a été libéré, pensé qu'il pourrait être utile d'ajouter mes 2 cents:

La création d'un fichier batch:

Ouvrez Le Bloc-Notes

Copiez le et collez-le dans le bloc-notes, en remplacement de la solution que vous voulez construire avec [Ma Solution Nom Ici]:

@echo off

:variables
SET msBuildLocation="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
SET solutionDirectory=[My Solution Location Here]
SET batchFileLocation=[BatchFileLocation Here]

cd %solutionDirectory%

echo Building MS files for [My Solution Name Here].

call %msBuildLocation% [My Solution Name].sln /p:Configuration=Debug /m:4 /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false  /consoleloggerparameters:Summary;ShowTimestamp;ShowEventId;PerformanceSummary
echo -
echo --------Done building [My solution name here].--------------
echo -

cd %batchFileLocation%

Enregistrez votre fichier de commandes que tout ce que vous voulez avec le .extension bat. Assurez-vous de sélectionner tous les fichiers au lieu de .txt ou autre, ça ne marchera pas. Appeler le fichier de commandes en émettant la commande de cd où vous l'avez enregistré à l', et cela devrait fonctionner. Ou, il suffit de double-clic. Fait.

Veuillez noter que ma version de visual studio, c'est la collectivité; vous aurez besoin de remplacer le chemin d'accès avec la version appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X