public string ResolveRuntimePackageUrls(string manifest = null)
{
ServiceSettings settings = ServiceSettings.Load(Paths.Settings);
CloudRuntimeCollection availableRuntimePackages;
if (!CloudRuntimeCollection.CreateCloudRuntimeCollection(out availableRuntimePackages, manifest))
{
throw new ArgumentException(
string.Format(Resources.ErrorRetrievingRuntimesForLocation,
settings.Location));
}
ServiceDefinition definition = this.Components.Definition;
StringBuilder warningText = new StringBuilder();
List<CloudRuntimeApplicator> applicators = new List<CloudRuntimeApplicator>();
if (definition.WebRole != null)
{
foreach (WebRole role in
definition.WebRole.Where(role => role.Startup != null &&
CloudRuntime.GetRuntimeStartupTask(role.Startup) != null))
{
CloudRuntime.ClearRuntime(role);
string rolePath = Path.Combine(this.Paths.RootPath, role.name);
foreach (CloudRuntime runtime in CloudRuntime.CreateRuntime(role, rolePath))
{
CloudRuntimePackage package;
runtime.CloudServiceProject = this;
if (!availableRuntimePackages.TryFindMatch(runtime, out package))
{
string warning;
if (!runtime.ValidateMatch(package, out warning))
{
warningText.AppendFormat("{0}\r\n", warning);
}
}
applicators.Add(CloudRuntimeApplicator.CreateCloudRuntimeApplicator(
runtime,
package,
role));
}
}
}
if (definition.WorkerRole != null)
{
foreach (WorkerRole role in
definition.WorkerRole.Where(role => role.Startup != null &&
CloudRuntime.GetRuntimeStartupTask(role.Startup) != null))
{
string rolePath = Path.Combine(this.Paths.RootPath, role.name);
CloudRuntime.ClearRuntime(role);
foreach (CloudRuntime runtime in CloudRuntime.CreateRuntime(role, rolePath))
{
CloudRuntimePackage package;
runtime.CloudServiceProject = this;
if (!availableRuntimePackages.TryFindMatch(runtime, out package))
{
string warning;
if (!runtime.ValidateMatch(package, out warning))
{
warningText.AppendFormat(warning + Environment.NewLine);
}
}
applicators.Add(CloudRuntimeApplicator.CreateCloudRuntimeApplicator(runtime,
package, role));
}
}
}
applicators.ForEach<CloudRuntimeApplicator>(a => a.Apply());
this.Components.Save(this.Paths);
return warningText.ToString();
}