So the UBT (Unreal Build Tool) should be detecting if Express vs. Non Express is installed, the ATL support wasn’t shipped with VS Express.
Do you by chance have another full version of visual studio installed? That may be fooling the auto detection code.
VSAccessor.Build.cs
if (WindowsPlatform.bHasVisualStudioDTE)
{
// This module requires atlbase.h to be included before Windows headers, so we can make use of shared PCHs. This
// module will always have its own private PCH generated, if necessary.
PCHUsage = PCHUsageMode.NoSharedPCHs;
Definitions.Add("WITH_VSEXPRESS=0");
}
else
{
Definitions.Add("WITH_VSEXPRESS=1");
}
To work around it - you can probably comment all that out and just use
To my understanding, UE4 was developed with Visual Studio 2012 in mind as the Windows IDE. Editing your code in it should be no issue. Jumping up to 2013 might introduce a few gotchyas, like you’ve found.
If it’s no big issue, Visual Studio 2012 should be your IDE of choice at the moment, until better integration with 2013 is deployed.
At Epic we’ve switched over to 2013. So it’s definitely ready for it, this is just an issue with having Express and non-express versions installed side by side. It should be fixed as soon as we do another push to GitHub.
The fix for this problem is to change UEBuildWindows.cs.
The property bHasVisualStudioDTE will return true if you have more than one version of visual studio (and one of them is not express).
The fix is to add a check for the environment variable VisualStudioEdition (which exists in 2013 express).
The function becomes:
/** True if VS EnvDTE is available (false when building using Visual Studio Express) */
public static bool bHasVisualStudioDTE
{
get
{
string envVSEdition = System.Environment.GetEnvironmentVariable("VisualStudioEdition");
if (envVSEdition != null && envVSEdition.ToLower().IndexOf("express") != -1)
{
return false;
}
try
{
// Interrogate the Win32 registry
return RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32).OpenSubKey("VisualStudio.DTE") != null;
}
catch(Exception)
{
return false;
}
}
}
Thanks Densohax, we have it fixed in mainline, there’s actually a better set of DDE variables you can check in the registry. We haven’t pushed the latest version to github yet…hopefully soon (eventually it will be realtime). We’re also working on a hotfix that will resolve it in the release branch.