Using Visual Studio Developer Prompt for target execution - visual-studio-2017

I have VS2017 installed and a target file I have a target file
<Target Name="TargetName">
<Exec Command="some-command"></Exec>
</Target>
Target command runs fine. Except it run in cmd instead of developer command prompt. Previously, it used to run in developer command prompt.
I know this because it is not able to find variable VCINSTALLDIR and also nmake command. When I run the same command from developer prompt, they work as expected.
I have reinstalled VS2017. Still the issue persists. Is there any setting in VS2017 to make it use developer prompt?

I solved my problem by adding vsdevcmd.bat in the PATH environment and changing command to
<Exec Command="call vsdevcmd.bat & some-command"></Exec>

Related

how to disable /Qspectre using Visual Studio 2019 Developer Command Prompt

I tried to google it but couldn't find it. I want to Disable /Qspectre from command line.
Note: I am trying this inside docker container i have already
installed component for it.But still i am getting error MSB8040:
Spectre-mitigated libraries are required for this project.So i want to
disable it and give try. if it works.
docker run -v C:\BuildTools\ConsoleApplication1:C:\ConsoleApplication1 --name CP3 buildtools2019 msbuild C:\ConsoleApplication1\ConsoleApplication1.sln -maxcpucount:3 /p:Configuration=Debug /p:Platform=x64
This is PowerShell command which i am using it to run my project. open for all suggestion and recommendation.
I am afraid there is no direct command line method to disable /Qspectre. I suggest that you could disable it by some other methods.
Put/copy file with name 'Directory.Build.props' to build folder with content:
<Project>
<PropertyGroup Label="Configuration">
<SpectreMitigation>false</SpectreMitigation>
</PropertyGroup>
</Project>
That overrides default VS behavior and disables /QSpectre compiler switch.
You could refer to this link.

Run cl.exe from cmd

I have installed Visual Studio Community 2017 with C++. I wanted to use its compiler from cmd. I am able to use it from Developer Command Prompt for VS 2017 but I am unable to use it from normal cmd. I have tried running vsvarsall.exe by right click-> run as administrator. But nothing happens. Seems like I have to set environment variables manually.
Whenever I try to run the command
cl hello.c
it says hello.c(1): fatal error C1034: stdio.h: no include path set
Visual Studio includes a batch file that prepares the environment for you (actually, the Developer Command Prompt calls it under-the-hood).
I've never tried with the Community Edition, but for VS 2017 Professional it is located at "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat". It may vary if you changed the installation path, of course.
So, all you have to do is to invoke it:
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat"
Something like following should appear
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.7.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'
After that you can invoke cl, nmake, msbuild as within cmd.
You can also invoke vcvarsall.bat x86 instead (the vcvars32.bat is just a shortcut for that).
You can avoid typing it each time by creating a batch that automatically invokes it and then open a command prompt
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat"
cmd
And then run that batch instead of cmd.
Another option is to add the "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\" to the path so you only have to type vcvars32.bat when you need the developer tools.
Taken from msdn:
A developer command prompt shortcut automatically sets the correct
paths for the compiler and tools, and for any required headers and
libraries. You must set these environment values yourself if you use a
regular Command Prompt window. For more information, see Setting the Path and Environment Variables for Command-Line Builds.
By running vcvarsall.bat in a plain Command Prompt window, you can set environment variables to configure the command line for native 32-bit or 64-bit compilation, or for cross-compilation to x86, x64, or ARM processors.
To run vcvarsall.bat
At the command prompt, change to the Visual C++ installation directory. (The location depends on the system and the Visual Studio installation, but a typical location is C:\Program Files (x86)\Microsoft Visual Studio version\VC\.) For example, enter:
cd "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC"
To configure this Command Prompt window for 32-bit x86 command-line builds, at the command prompt, enter:
vcvarsall x86
The command file sets the required environment variables for the paths to the build tools, libraries, and headers. You can now use this command prompt window to run the command-line compiler and tools.
If you wish to set the include paths etc. yourself, check out https://learn.microsoft.com/nb-no/cpp/build/reference/cl-environment-variables
open cmd as admin
cd "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\ (check for the correct version of VS)
while in cmd mode, run vcvars64.bat/vcvars32.bat,
now compile ur code for example
cl main.cpp // will give some warning. to supress it type
cl /EHs main.cpp

How to Run MSBuild Outside of the MSVS Dev Prompt?

I've recently been busy working on making proper build scripts for a code library I've been designing, and have been stuck on getting MSBuild to properly compile for my Windows builds. What I'm trying to do is call MSBuild from a batch script without it opening the Visual Studio IDE, which it appears to constantly do if I'm not executing it from the Developer Command Prompt for Visual Studio. My script is simple enough, just calling
start C:\Program Files (x86)\...\MSBuild\15.0\Bin\MSBuild.exe <Project>.sln
Besides a few other specifiers tagged onto the end of it, that's what I'm trying to use to run my Windows builds. The issue here is that whenever this code is called outside of the VS Dev Prompt, Visual Studio itself opens, not building the code at all. I couldn't find anyone else struggling with this same issue either, as it seems to be new to the integration of MSBuild and Visual Studio. Testing with older versions of MSBuild went to show that I could build projects as I wanted to outside of the Dev Prompt. Could I be missing some environment variable supplied in the Dev Prompt that changes the executable behavior? I couldn't seem to find any executable specifiers that would change this, either.
Maybe I'm taking a completely wrong approach to this problem? My end goal is to provide consumers with a collection of build scripts, one for each platform they're targeting, so I am definitely open to other solutions.
The canonical answer:
You can use the devenv command with the /build command line option and the name of your project file.
Alternatively, you can run one of the vcvars*.bat scripts to set up the necessary environment and then use msbuild.
For more info, see https://learn.microsoft.com/en-gb/cpp/build/building-on-the-command-line.
Update: Contrary to the official advice above, this is what works on my laptop with VS2017 community edition.
Setup the environment by running the bat file that is targeted by the "developer command prompt for VS2017". (Right-click on that in the start menu, then select "Open file location" then right-click on the shortcut and select "properties". For me that is "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat".
You should call this file from your build script.
cd to your project directory and then use msbuild like this:
msbuild My-project.vcxproj /p:Configuration=Release
For some really strange reason I can use the devenv method if I open the official developer command prompt but launching devenv from another command prompt even with the environment variables set does nothing. (And I even compared the set of environment variables in both command prompts and they are equal.)
How to Run MSBuild Outside of the MSVS Dev Prompt?
If the necessary environment not be set correct, then the build command becomes " mysolution.sln". And executing it indeed starts VS. So you should run the vcvars*.bat scripts to set up the necessary environment and then use msbuild. Following is my a batch script, it has been working for some time, you can check it:
#echo OFF
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
echo "Starting Build for all Projects with proposed changes"
MSBuild.exe "C:\Users\Admin\Source\repos\MyTestProject\MyTestProject.sln"
pause
echo "All builds completed."
Here is the test sample result:
See How to create a Simple Build Script for Visual Studio from the Command Line? for more details.

Visual Studio 2017: Command "setx" is not valid

I am trying some instructions for setting an Environment variable using visual studio for opencv
As per the instructions, I have to open the command window and run the following command in it
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc14
But doing so is resulting in an error as Command "setx" is not valid
How to proceed?
Referring this article by MS, it is clear that you need to open the Developer Command Prompt for VS 2017. Do so with administrative privileges.
Then run above command in it to make it work.
Run command prompt as administrator
(search cmd and when the search results are displayed, right click over the command prompt and select the "run as administrator" option.)
Then just type the command and enjoy:)

mspdb140.dll is missing from your computer

I am trying to check if the visual studio compiler exist in my path. I have add vc/bin dir to the system environment path. When I open a windows console terminal I try to call cl.exe from the console. I am receiving the following message:
The program cant start because mspdb140.dll is missing from your computer. Try reinstalling the program to fix this problem.
What exactly is this message stands about? I tried to followed the instructions from this post, I run the bat file, (furthremore I add manually the dll dir in the path). However I am receiving the same message.
I have add vc/bin dir to the system environment path
That certainly isn't enough. Unclear what else you are doing. There are a wholeheckofalot more environment variables that need to be hacked correctly to allow proper compiling and linking. The values of INCLUDE and LIB are critical for example.
There is a .bat file that takes care of it, vc/vcvarsall.bat in the VS install directory. You pass the architecture you want to target, default is x86. Be sure you use the CALL statement if you use a .bat file yourself and that you in fact see the variables being set correctly with, say, SET INCLUDE. Watch out for a broken PATH variable, a very common scourge on programmers' machines. Usually corrupted by a wonky installer.
The VS installer creates shortcuts to run this .bat file. Used to be named "Visual Studio Command Prompt", might be "Developer Command Prompt". Got pretty muddy since Windows 8.
I personally just an entry in the VS Tools menu. Very handy. Use Tools > External Tools > Add button. And fill out the dialog similar to this:
Title = Command Prompt
Command = cmd.exe
Arguments = /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" x86
Initial directory = $(ProjectDir)
Tweak 14.0 to the version number of your VS version, that's VS2015. VS2013 = 12.0, VS2012 = 11.0, VS2010 = 10.0