in GoogleTestAdapter/NewProjectWizard/WizardImplementation.cs [73:196]
public void RunStarted(object automationObject,
Dictionary<string, string> replacementsDictionary,
WizardRunKind runKind, object[] customParams)
{
DTE dte = (DTE)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SDTE));
Projects dteProjects = dte.Solution.Projects;
List<string> projectNames = new List<string>();
bool isPlatformSet = false;
foreach (Project project in dteProjects)
{
// TODO: Filter out projects not applicable
projects.Add(project);
projectNames.Add(project.Name);
}
ConfigurationData configurationData = new ConfigurationData(dte, projectNames.ToArray());
SinglePageWizardDialog wiz = new SinglePageWizardDialog(Resources.WizardTitle, configurationData);
bool? success = false;
// If RunSilent is true, we're in automated testing
if (replacementsDictionary[RunSilent] == "True")
{
success = true;
SetDefaultData(ref configurationData);
}
else
{
success = wiz.ShowModal();
}
if (success == false)
{
throw new WizardCancelledException();
}
selectedProjectIndex = configurationData.ProjectIndex;
if (selectedProjectIndex >= 0)
{
foreach (Property prop in projects[selectedProjectIndex].Properties)
{
if (prop.Name.Equals("WindowsTargetPlatformVersion"))
{
replacementsDictionary[TargetPlatformVersion] = (string)prop.Value;
isPlatformSet = true;
}
}
}
string consumeGTestAs = configurationData.IsGTestStatic ? "static" : "dyn";
string runtimeLibs = configurationData.IsRuntimeStatic ? "static" : "dyn";
string nugetPackage = "Microsoft.googletest.v140.windesktop.msvcstl." + consumeGTestAs + ".rt-" + runtimeLibs;
// Work around so we can choose the package for the nuget wizard
string tmpWizardData = Path.GetTempFileName();
File.AppendAllText(tmpWizardData, "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\"><WizardData>");
File.AppendAllText(tmpWizardData, replacementsDictionary[WizardData].Replace("$nugetpackage$", nugetPackage));
File.AppendAllText(tmpWizardData, "</WizardData></VSTemplate>");
customParams[0] = tmpWizardData;
try
{
Assembly nugetAssembly = Assembly.Load("NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
nugetWizard = (IWizard)nugetAssembly.CreateInstance("NuGet.VisualStudio.TemplateWizard");
nugetWizard.RunStarted(automationObject, replacementsDictionary, runKind, customParams);
}
catch (Exception)
{
ShowRtlAwareMessageBox(Resources.NuGetInteropNotFound);
throw;
}
if (configurationData.IsRuntimeStatic)
{
replacementsDictionary[RuntimeRelease] = "MultiThreaded";
replacementsDictionary[RuntimeDebug] = "MultiThreadedDebug";
}
else
{
replacementsDictionary[RuntimeRelease] = "MultiThreadedDLL";
replacementsDictionary[RuntimeDebug] = "MultiThreadedDebugDLL";
}
if (!isPlatformSet)
{
IEnumerable<TargetPlatformSDK> platformSdks = ToolLocationHelper.GetTargetPlatformSdks();
IEnumerable<TargetPlatformSDK> allSdks = WizardImplementation.GetAllPlatformSdks();
TargetPlatformSDK latestSdk = allSdks.FirstOrDefault();
if (latestSdk == null)
{
ShowRtlAwareMessageBox(Resources.WinSDKNotFound);
throw new WizardCancelledException(Resources.WinSDKNotFound);
}
string versionString;
if (latestSdk.TargetPlatformVersion.Major >= 10)
{
List<Platform> allPlatformsForLatestSdk = ToolLocationHelper.GetPlatformsForSDK("Windows", latestSdk.TargetPlatformVersion)
.Select(moniker => TryParsePlatformVersion(moniker))
.Where(name => name != null)
.OrderByDescending(p => p.Version).ToList();
Platform latestPlatform = allPlatformsForLatestSdk.FirstOrDefault();
if (latestPlatform == null)
{
ShowRtlAwareMessageBox(Resources.WinSDKNotFound);
throw new WizardCancelledException(Resources.WinSDKNotFound);
}
versionString = latestPlatform.Version.ToString();
}
else
{
versionString = latestSdk.TargetPlatformVersion.ToString();
}
replacementsDictionary[TargetPlatformVersion] = versionString;
}
}