in src/Adapter/PlatformServices.Desktop/Utilities/DesktopDeploymentUtility.cs [115:205]
protected IEnumerable<DeploymentItem> GetSatellites(IEnumerable<DeploymentItem> deploymentItems, string testSource, IList<string> warnings)
{
List<DeploymentItem> satellites = new List<DeploymentItem>();
foreach (DeploymentItem item in deploymentItems)
{
// We do not care about deployment items which are directories because in that case we deploy all files underneath anyway.
string path = null;
try
{
path = this.GetFullPathToDeploymentItemSource(item.SourcePath, testSource);
path = Path.GetFullPath(path);
if (string.IsNullOrEmpty(path) || !this.AssemblyUtility.IsAssemblyExtension(Path.GetExtension(path))
|| !this.FileUtility.DoesFileExist(path) || !this.AssemblyUtility.IsAssembly(path))
{
continue;
}
}
catch (ArgumentException ex)
{
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
}
catch (SecurityException ex)
{
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
}
catch (IOException ex)
{
// This covers PathTooLongException.
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
}
catch (NotSupportedException ex)
{
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
}
// Note: now Path operations with itemPath should not result in any exceptions.
// path is already canonicalized.
// If we cannot access satellite due to security, etc, we report warning.
try
{
string itemDir = Path.GetDirectoryName(path).TrimEnd(
new char[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar });
List<string> itemSatellites = this.AssemblyUtility.GetSatelliteAssemblies(path);
foreach (string satellite in itemSatellites)
{
Debug.Assert(!string.IsNullOrEmpty(satellite), "DeploymentManager.DoDeployment: got empty satellite!");
Debug.Assert(
satellite.IndexOf(itemDir, StringComparison.OrdinalIgnoreCase) == 0,
"DeploymentManager.DoDeployment: Got satellite that does not start with original item path");
string satelliteDir = Path.GetDirectoryName(satellite).TrimEnd(
new char[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar });
Debug.Assert(!string.IsNullOrEmpty(satelliteDir), "DeploymentManager.DoDeployment: got empty satellite dir!");
Debug.Assert(satelliteDir.Length > itemDir.Length + 1, "DeploymentManager.DoDeployment: wrong satellite dir length!");
string localeDir = satelliteDir.Substring(itemDir.Length + 1);
Debug.Assert(!string.IsNullOrEmpty(localeDir), "DeploymentManager.DoDeployment: got empty dir name for satellite dir!");
string relativeOutputDir = Path.Combine(item.RelativeOutputDirectory, localeDir);
// Now finally add the item!
DeploymentItem satelliteItem = new DeploymentItem(satellite, relativeOutputDir, DeploymentItemOriginType.Satellite);
this.DeploymentItemUtility.AddDeploymentItem(satellites, satelliteItem);
}
}
catch (ArgumentException ex)
{
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
string warning = string.Format(CultureInfo.CurrentCulture, Resource.DeploymentErrorGettingSatellite, item, ex.GetType(), ex.GetExceptionMessage());
warnings.Add(warning);
}
catch (SecurityException ex)
{
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
string warning = string.Format(CultureInfo.CurrentCulture, Resource.DeploymentErrorGettingSatellite, item, ex.GetType(), ex.GetExceptionMessage());
warnings.Add(warning);
}
catch (IOException ex)
{
// This covers PathTooLongException.
EqtTrace.WarningIf(EqtTrace.IsWarningEnabled, "DeploymentManager.GetSatellites: {0}", ex);
string warning = string.Format(CultureInfo.CurrentCulture, Resource.DeploymentErrorGettingSatellite, item, ex.GetType(), ex.GetExceptionMessage());
warnings.Add(warning);
}
}
return satellites;
}