protected internal virtual void SetConfiguration(string configKey)
{
if (configKey == null)
throw new ArgumentNullException("configKey");
// Can't ask for the active config until the project is opened, so do nothing in that scenario
if (!projectOpened)
return;
// We cannot change properties during the build so if the config
// we want to se is the current, we do nothing otherwise we fail.
if (this.BuildInProgress)
{
var currentConfigKey = ProjectConfig.TryGetActiveConfigurationAndPlatform(ServiceProvider, this);
if (ProjectConfig.Eq(currentConfigKey, configKey))
return;
throw new InvalidOperationException("Can't set other configuration during a build in progress.");
}
string configName;
string platformName;
if (!ProjectConfig.TrySplitConfigurationCanonicalName(configKey, out configName, out platformName))
configName = configKey;
bool propertiesChanged = this.buildProject.SetGlobalProperty(ProjectFileConstants.Configuration, configName);
if (!string.IsNullOrWhiteSpace(platformName))
propertiesChanged |= this.buildProject.SetGlobalProperty(ProjectFileConstants.Platform, ProjectConfig.ToMSBuildPlatform(platformName));
//this.buildProject.ReevaluateIfNecessary(); //???
if (this.currentConfig == null || propertiesChanged)
this.currentConfig = this.buildProject.CreateProjectInstance();
if (propertiesChanged || this.designTimeAssemblyResolution == null)
{
if (this.designTimeAssemblyResolution == null)
this.designTimeAssemblyResolution = new DesignTimeAssemblyResolution();
this.designTimeAssemblyResolution.Initialize(this);
}
this.options = null;
}