How to use MSBuild to target v110 platform toolset? - visual-c++

I am developing a command line application that creates a full Visual Studio 11 solution made of a single VC++ project and that tries to compile it in the end using MSBuild.
The problem I am facing is strange.
If I execute my command line program inside Visual Studio 11 it works; if I instead launch it outside the development environment it throws me the error:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: Specified platform toolset (v110) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected. [f:\ABC.vcxproj]
The command I am using is the following:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe f:\snake\W9A30040.vcxproj /property:PlatformToolset=v110;Configuration=Debug /v:quiet
But I have the feeling that PlatformToolset=v110 is ignored and MSBuild use v100 (Visual Studio 2010).
Do you have any suggestions how to tell MSBuild to compile for v110 Platform Toolset?

I ran into the same problem as well with the full release of VS 2012. You can also set the VisualStudioVersion as a property with MSBuild as opposed to dealing with environment variables as mentioned in the accepted answer. For instance:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\myproject.vcxproj /p:VisualStudioVersion=11.0
The environment variables approach I'm sure work just as well, I honestly didn't try that as I was trying to stay away from having to modify the environment variables.

Make sure that the top of your .SLN file looks like this:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
When you double-click on the solution file, it's the # Visual Studio 2012 that controls which version of Visual Studio is loaded (and controls the icon displayed in Windows Explorer).
However, when you run MSBuild, it looks at the Format Version 12.00 part.
Confused?
This is confusing, since Visual Studio 2010 is version 10.0 and Visual Studio 2012 is version 11.0 (not 12.0), and using the version 12.0 solution file format causes MSBuild to (implicitly) set VisualStudioVersion to 11.0.

I found a workaround for this issue; could be a problem of Visual Studio 11 Beta that will be resolved before official release.
Anyway, if you are interestedm just set the environment variable "VisualStudioVersion" equal to "11.0" before calling MSBuild.exe.
In batch files
set VisualStudioVersion=11.0
or in VB.NET
Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")

Starting with Visual Studio 2013, MSBuild is now part of Visual Studio, and the correct path should be $(MSBuildToolsPath) (“C:\Program Files (x86)\MSBuild\12.0\Bin”). If you use msbuild.exe from the .Net framework folder (“C:\Windows\Microsoft.NET\Framework64\v4.0.30319”) it will not able to distinguish the vs2012 and vs2013 versions.

Use the menu based options to do this. From VC++2010 Express:
- Right click on the main file of the project (not the solution itself at the very top of the tree).
- Click General.
- Find Platform Toolset on the right side of the dialog, top half.
- Change from v110 to v100.
- Click OK.
----- Done ------

Microsoft provides a batch file to set all the EnvVars
You find it in the Start Menu under "Microsoft Visual Studio 2012/Visual Studio Tools" or in the Visual Studio folder ("C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat")

Related

Compiling with Visual Studio 2012 tools through Visual Studio 2015

I have a lot of developers currently using Visual Studio 2012 and I would like to upgrade them to 2015 in two stages. First upgrade to Visual Studio 2015, then upgrade to the new MSBuild (compiler) toolset. This is important because I would like builds in Visual Studio to use the same toolset as builds in our build scripts, which are available on developer machines and used by the build servers. I would like to avoid picking a day and telling every developer to install Visual Studio 2015, and simultaneously pushing changesets to our repositories/branches to update the build scripts all at once.
From my understanding, the ToolsVersion attribute of the Project element in the project file drives the distinction between MSBuild versions. However, when building a project with ToolsVersion=4.0 in Visual Studio 2015, I receive the following messages:
Building with tools version "14.0".
Project file contains
ToolsVersion="4.0". This toolset may be unknown or missing, in which
case you may be able to resolve this by installing the appropriate
version of MSBuild, or the build may have been forced to a particular
ToolsVersion for policy reasons. Treating the project as if it had
ToolsVersion="14.0". For more information, please see
http://go.microsoft.com/fwlink/?LinkId=293424.
In addition to that, I can follow the build output and see that it is in fact using the Visual Studio 2015 toolset to compile the code. I know the "4.0" toolset is not missing (I have Visual Studio 2012 installed, along with the .NET Framework versions that include that version of MSBuild), so I'm assuming either Visual Studio 2015 can't find it, or there is a "policy reason" I don't understand.
According to the MSDN page for Standard and Custom Toolset Configurations, MSBuild 12.0 (Visual Studio 2013) includes the 4.0 toolset. However I can't find any information on MSBuild 14.0 (Visual Studio 2015).
Is it possible to build in Visual Studio 2015, but use the Visual Studio 2012 toolset? If so, how? And what are the "policy reasons" mentioned in the build warning?
Solution
Have your developers set the environment variable MSBUILDDEFAULTTOOLSVERSION to 4.0. One simple way to do this is to have them run open an elevated PowerShell prompt and run:
[Environment]::SetEnvironmentVariable("MSBUILDDEFAULTTOOLSVERSION", "4.0", "Machine")
Visual Studio will need to be reopened before it will pick up this change. Once you are ready to upgrade to the new MSBuild toolset, have your developers remove that environment variable:
[Environment]::SetEnvironmentVariable("MSBUILDDEFAULTTOOLSVERSION", "4.0", "Machine")
Background
From MSDN (emphasis mine):
Starting in Visual Studio 2013, the MSBuild Toolset version is the
same as the Visual Studio version number. MSBuild defaults to this
Toolset within Visual Studio and on the command line, regardless of
the toolset version specified in project file. This behavior can be
overridden by using the /ToolsVersion flag. For more information, see
Overriding ToolsVersion Settings.
Incidentally, to verify which MSBuild toolsets are available on a machine and where they are located, you can just open up PowerShell and run:
dir HKLM:\Software\Microsoft\MSBuild\ToolsVersions

Why am I not able to open a VS project

I have a Visual Studio project that I created in my previous PC (32-bit if that makes any difference). I recently got a new PC (64-bit) and I am trying to open the project and I am seeing the following error:
Unsupported
This version of Visual Studio does not have the following project types installed or does not support them. You can still open these projects in the version of Visual Studio in which they were originally created.
- ONew, "C:\temp\onb\ONewSln\ONew\ONew.csproj"
No changes required
These projects can be opened in this version of Visual Studio without changing them. They will continue to open in Visual Studio 2010 SP1 and in this version of Visual Studio.
- ONewWeb, "C:\temp\onb\ONewSln\ONewWeb\ONewWeb.csproj"
- ONewSln, "C:\temp\onb\ONewSln\ONewSln.sln"
Screenshot:
Is there a add-on or visual studio component that I have to download to make it work?
Please help me resolve the issue.
After doing some research and spending hours banging my head against the wall, I figured out how to resolve the issue.
You have to install Microsoft Office Developer Tools for Visual Studio 2012.
Open up the Web Platform Installer and if you don’t have it installed, download and install it. Search for Office Developer Tools and install it.
This will enable you to open the project without any issue.
Usually you can open VS2010 SP1 files in VS2012. But after opening and on compiling you may get some errors of missing packages. Then you have to install the missing packages. Check this out: Visual Studio 2012 compatibilty.
Some solutions, projects, files, and other assets that you created in Visual Studio 2010 Service Pack 1 (SP1) will run without modification in Visual Studio 2012, but others have to be upgraded. The above document describes how various kinds of assets behave in these two versions of Visual Studio.
If you use both Visual Studio 2012 and Visual Studio 2010 SP1, you can create and modify projects and files in either version as long as you don't add features that require Visual Studio 2012.
VS2012 may convert projects when you first open them, but the changes are (except noted in the document linked) backward compatible with VS2010.

Visual Studio 2012 Ultimate: error MSB8020:

i have Visual Studio 2012 Ultimate version 11.0.61030.00 update 4.
i try to compile with Daffodil toolset platform v60
enter link description here
but how fix this error?
Error 4 error MSB8020: The builds tools for v60 (Platform Toolset = 'v60') cannot be found. To build using the v60 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install v60 to build using the v60 build tools. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets.
location files from Daffodil is:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsets\v60
any help pls
ty.
Right click the project from the solution explorer, click properties, when it opens expand configuration properties and open the general tab.
Within there, there is a field called 'Platform Toolset' drop down the row next to it and choose the option that should have v60 in the title!
In order to use Daffodil in versions later than VS2010, you need the platform toolset of VS2010 installed AND the toolset you want to use, which is VS6. Have you installed both?
To use these platform toolsets, you must have the targeted version of Visual Studio installed. Currently supported pl
Visual Studio 2012/2013/2015
Daffodil works fine in VS 2012 and later versions as long as VS 2010 is also installed.
Source: https://daffodil.codeplex.com/

Visual Studio 2012 doesn't convert vs2010 solution?

I opened my vs2010 solution with vs2012 but it didn't make any conversion as from 2008 to 2010 was happening. So my solution still remains the same as 10 label on it. when I make a new solution of course it has 11 label on it. I haven't got any problem running like that but I am curious. Is there any difference? if yes, how to convert into vs2012 solution?
I managed to 'convert' the solution file to change the line containing '# Visual Studio 2010' to '# Visual Studio 2012' in the .SLN file.
Manual editing of the solution file is not necessary, or recommended. Simply open the VS2010 solution in VS2012, left-click the solution (at the very top of the Solution Explorer), then use File | Save As to overwrite the original file. This will effectively convert the VS2010 solution file to a VS2012 solution file.
There are some exceptions, but mostly you'll be able to open the same project and solution files files in both VS2012 and VS2010 SP1.
VS2012 may convert projects when you first open them, but the changes are (except noted in the document linked) backward compatible with VS2010 (ie using conditionals where needed to only apply to either version when loaded) Most project types will be left entirely untouched though.
It is about Visual Studio 2012 Compatibility
If you created your assets in Visual Studio 2010 with Service Pack 1 (SP1), many of them will load and run in Visual Studio 2012 without any further action on your part.
Many assets will also open again in Visual Studio 2010 with SP1 without any issues, even after you open those assets in Visual Studio 2012
For C++ projects it makes a difference, as the 2012 compiler (VC11) will only be used on projects that are explicitly 2012, not on 2010 projects opened in VS 2012. Some C++11 improvements are available with the VC11 compiler but not with VC10 (see this SO Answer for a summary), including:
Range based for-loops
New standard library headers (atomic, mutex, thread,...)
Smaller standard library container sizes
(And more to follow when the Nov 2012 CTP is delivered to VS 2012)
In order to convert from VS 2010 project to VS2012 there is no need to manually edit the solution file or 'Save As' over the existing project. Instead:
If you decline the update when first prompted, you can update the project later by opening the Project menu and choosing Update VC++ projects... [at the top of the menu options]
From MSDN's "How to: Upgrade Visual C++ Projects to Visual Studio 2012"
(This page was linked from #Joachim's MSDN link, but I wanted to have the answer here on SO since a number of other answers suggested manual workarounds instead of this VS 2012 feature)
In my case, I had some Visual Source Safe stuff (my project was created with Visual Studio 2003/2005, yes, very old!)
Once I manually removed the VSS stuff, the conversion succeeded.
PS: I know it's about VS2010, but maybe this helps others.
You can convert a project from VS2010 to VS2012 by doing the following:
Add the 2010 project to your VS2012 solution by right-click on your solution in the Solution Explorer and Select Add --> Existing Project...
The project will appear in the solution and will have (Visual Studio 2010) appended to its name.
Right-click on the added project and select Properties.
In the Configuration Properties --> General pane, change the setting in Platform Toolset field to Visual Studio 2012 (v110)
Repeat for each configuration type, e.g. Release and Debug.
I came across this question while googling for a solution to a specific problem: MSBuild was failing to execute the Publish target against a VS2012 solution that had started life in VS2010 when called from the command line (specifically through TeamCity):
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Windows Azure Tools\2.3\Microsoft.WindowsAzure.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
MSBuild was looking for the Azure SDK 2.3 targets in the VS10 location (C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Windows Azure Tools\2.3\Microsoft.WindowsAzure.targets). The cause is explained by Sayed Ibrahim Hashimi in a blog post and, as I understood it, boils down to some decisions they made while enabling cross-version compatibility for solution files. The solution was simple: add the VisualStudioVersion property to the MSBuild invocation, something like this:
msbuild.exe MyAwesomeWeb.sln /p:VisualStudioVersion=11.0
Practically speaking, this overrides the following in each csproj file:
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
Presumably you could get the same result by editing all of these by hand to replace 10.0 with 11.0 but that might break backwards-compatibility -- I haven't tried it. I also haven't tried an update to VS2013 to see if the problem persists.
So to wrap this up by answering the question: yes, there are some differences before you "convert" (using any of the methods offered by other answerers) and some differences remain afterwards.
This is slightly different, but along the same lines so in case it helps anyone:
I was loading a project where it looked like it was loading and then kept showing all projects as unavailable. No errors were on the migration report. I tried reloading the solution and projects many times, using various methods including suggestions here.
Finally I found a "Resolve Errors" option when right clicking on the solution in the Solution Explorer. VS went through a load process again and it worked; no problems.
I don't know what it did differently that time, but apparently it made a difference.
it's to simple just edit the .sol file
change the version to 11
like this
Microsoft Visual Studio Solution File, Format Version 12.00
Visual Studio 2012

Visual Studio 2010 IDE with Visual C++ 6.0 compiler?

How can I do that ? Can I work in VS2010 IDE but have it compile with the VS C++ 6.0 compiler?
And can I work in VS2010 IDE and have it compile by using the the VS2008 compiler ?
you need the Daffodil extension
I know it is possible to achieve this with VS2008 IDE and I'm 99% sure it is the same with VS2010 (but I don't have one to try with). Make a batch file in which you first need to call VCVARS32.BAT file that is included with VC++ 6.0 and then start Visual Studio with "/useenv" switch. You will then use this batch file to start Visual Studio.
.bat file:
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
start "" "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" /useenv
NOTE: This is path to VS2008 IDE, you need to change path for VS10 by yourself (probably just needs changing number 9 to number 10). Also if you are using 64bit OS you will need to change both paths to use "Program Files (x86)".
Isn't possible.
You can use VS2010 C++ compiler to compile VS6 code w/o any problem.
take care about the solution will be migrated to new format (old one is saved as backup)
Here is link below which talks about visual studio 2008 but you can refer it to execute similar steps on visual studio 2010.
http://resnikb.wordpress.com/2009/10/28/using-visual-studio-2008-with-visual-c-6-0-compiler/

Resources