Brand new installs of Visual Studio 2017 do not seem to be able to open some older web projects created in Visual Studio 2015 or before. To fix you need to add one line to your csproj file.

The problem

When you open the solution in VS 2017 the project will not be loaded. If you try and right click and reload the project check the output window to see the following error:

error : The imported project “C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets” was not found. Also, tried to find “WebApplications\Microsoft.WebApplication.targets” in the fallback search path(s) for $(VSToolsPath) - “C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0” . These search paths are defined in “C:\Users\Somebody\AppData\Local\Microsoft\VisualStudio\15.0_5a54ce33\devenv.exe.config”. Confirm that the path in the declaration is correct, and that the file exists on disk in one of the search paths. c:\Projects\MyApp\MyProj.csproj

The solution

It seems the new version of msbuild does not ship with Microsoft.WebApplication.targets. To fix you need to update your csproj file as so:

  1. Edit the web app csproj (right click). Find the section in the csproj towards the bottom concerning build tools. It should look like so.
<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  1. You need to add one VSToolsPath line below the VisualStudioVersion tag so it looks like so:
<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  1. Repeat this for every unloaded/broken web application in the solution. Then reload the affected web applications (right click in solution explorer) and voila, they should work in vs 2017 and 2015 now.

Want this fixed? Follow the problem on VisualStudio.com