I’m having similar issues with VS2013 Express. Found out that the define was set to WITH_VSEXPRESS=0, even that I restarted the machine after VS installation and rebuild project files with GenerateProjectFiles.bat.
Also noticed even that the WITH_VSEXPRESS=1, VSAccessorModule.cpp doesn’t work properly because of the #if !WITH_VSEXPRESS, not sure is this an VS2013 issue but #if !defined(WITH_VSEXPRESS) seems to work.
I just changed both WITH_VSEXPRESS to =1 in the file VSAccessor.Build.cs. Then rebuild the project “UnreadBuildTool”. After that build the UE4 project and it should work.
This seems to work for both Visual Studio 2012 Ultimate and Visual Studio 2013 Express for Desktop.
Sorry about this! We discovered an issue at the last second where having multiple versions of Visual Studio installed, if any version is a non-Express version, Unreal Build Tool will assume you have the Professional version of Visual Studio 2013 and try to compile with ATL enabled, which is not included with Visual Studio 2013 Express. Editing VSAccessor.Build.cs and forcing WITH_VSEXPRESS=1 is a totally acceptable workaround. We’ll try to get a proper fix out to you guys soon.
Yes, I figured it must be because I have like 6 different Visual Studio versions installed, a mix of 2008 Professional, 2010 Ultimate and 2013 Express.
You know what it was for me? Atmel Studio. They install the Visual Studio 10 IDE wraper up, but it comes back as a full version. Also I had both Visual Studio 12 installed as well as 13 and I had to uninstall 12 because the project generator kept getting wrong folders.
Just some extra thoughts:)
PS - Oh, found the code in the build process that does this. Its over in UEBuildWindows.cs. I don’t have VS 13 pro so I don’t know the right string, anyone else know if this works who have it?
/** True if VS EnvDTE is available (false when building using Visual Studio Express) */
public static bool bHasVisualStudioDTE
{
get
{
try
{
RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32).OpenSubKey("VisualStudio.DTE");
if (key == null) return false;
key = key.OpenSubKey("CurVer");
if (key == null) return false; // shouldn't happen if VS Pro is installed right
string version = key.GetValue(null) as string;
if (string.IsNullOrWhiteSpace(version)) return false; // again, shouldn't happen
if (version != "VisualStudio.DTE.12.0" || version != "VisualStudio.DTE.13.0") return false; // note sure about 13.0 as it stull uses the 12 DTE interface?
return true;
// Interrogate the Win32 registry
// return RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32).OpenSubKey("VisualStudio.DTE") != null;
}
catch(Exception)
{
return false;
}
}
}