internal static string CreateManifestNameImpl ( string fileName, string linkFileName, bool prependCultureAsDirectory, // true by default string rootNamespace, // May be null string dependentUponFileName, // May be null string culture, Stream binaryStream, // File contents binary stream, may be null TaskLoggingHelper log, bool treatAsCultureNeutral = false ) { // Use the link file name if there is one, otherwise, fall back to file name. string embeddedFileName = linkFileName; if (string.IsNullOrEmpty(embeddedFileName)) { embeddedFileName = fileName; } Culture.ItemCultureInfo info = Culture.GetItemCultureInfo(embeddedFileName, dependentUponFileName, treatAsCultureNeutral); // If the item has a culture override, respect that. if (!string.IsNullOrEmpty(culture)) { info.culture = culture; } var manifestName = StringBuilderCache.Acquire(); if (binaryStream != null) { // Resource depends on a form. Now, get the form's class name fully // qualified with a namespace. ExtractedClassName result = VisualBasicParserUtilities.GetFirstClassNameFullyQualified(binaryStream); if (result.IsInsideConditionalBlock) { log?.LogWarningWithCodeFromResources("CreateManifestResourceName.DefinitionFoundWithinConditionalDirective", dependentUponFileName, embeddedFileName); } if (!string.IsNullOrEmpty(result.Name)) { if (!string.IsNullOrEmpty(rootNamespace)) { manifestName.Append(rootNamespace).Append('.'); } manifestName.Append(result.Name); // Append the culture if there is one. if (!string.IsNullOrEmpty(info.culture)) { manifestName.Append('.').Append(info.culture); } } } // If there's no manifest name at this point, then fall back to using the // RootNamespace+Base file name if (manifestName.Length == 0) { // If Rootnamespace was null, then it wasn't set from the project resourceFile. // Empty namespaces are allowed. if (!string.IsNullOrEmpty(rootNamespace)) { manifestName.Append(rootNamespace).Append('.'); } // only strip extension for .resx and .restext files string sourceExtension = Path.GetExtension(info.cultureNeutralFilename); if ( string.Equals(sourceExtension, resxFileExtension, StringComparison.OrdinalIgnoreCase) || string.Equals(sourceExtension, restextFileExtension, StringComparison.OrdinalIgnoreCase) || string.Equals(sourceExtension, resourcesFileExtension, StringComparison.OrdinalIgnoreCase) ) { manifestName.Append(Path.GetFileNameWithoutExtension(info.cultureNeutralFilename)); // Append the culture if there is one. if (!string.IsNullOrEmpty(info.culture)) { manifestName.Append('.').Append(info.culture); } // If the original extension was .resources, add it back if (string.Equals(sourceExtension, resourcesFileExtension, StringComparison.OrdinalIgnoreCase)) { manifestName.Append(sourceExtension); } } else { manifestName.Append(Path.GetFileName(info.cultureNeutralFilename)); if (prependCultureAsDirectory) { // Prepend the culture as a subdirectory if there is one. if (!string.IsNullOrEmpty(info.culture)) { manifestName.Insert(0, Path.DirectorySeparatorChar); manifestName.Insert(0, info.culture); } } } } return(StringBuilderCache.GetStringAndRelease(manifestName)); }
internal static string CreateManifestNameImpl(string fileName, string linkFileName, bool prependCultureAsDirectory, string rootNamespace, string dependentUponFileName, Stream binaryStream, TaskLoggingHelper log) { string str = linkFileName; if ((str == null) || (str.Length == 0)) { str = fileName; } Culture.ItemCultureInfo itemCultureInfo = Culture.GetItemCultureInfo(str, dependentUponFileName); StringBuilder builder = new StringBuilder(); if (binaryStream != null) { ExtractedClassName firstClassNameFullyQualified = VisualBasicParserUtilities.GetFirstClassNameFullyQualified(binaryStream); if (firstClassNameFullyQualified.IsInsideConditionalBlock && (log != null)) { log.LogWarningWithCodeFromResources("CreateManifestResourceName.DefinitionFoundWithinConditionalDirective", new object[] { dependentUponFileName, str }); } if ((firstClassNameFullyQualified.Name != null) && (firstClassNameFullyQualified.Name.Length > 0)) { if ((rootNamespace != null) && (rootNamespace.Length > 0)) { builder.Append(rootNamespace).Append(".").Append(firstClassNameFullyQualified.Name); } else { builder.Append(firstClassNameFullyQualified.Name); } if ((itemCultureInfo.culture != null) && (itemCultureInfo.culture.Length > 0)) { builder.Append(".").Append(itemCultureInfo.culture); } } } if (builder.Length == 0) { if ((rootNamespace != null) && (rootNamespace.Length > 0)) { builder.Append(rootNamespace).Append("."); } string extension = Path.GetExtension(itemCultureInfo.cultureNeutralFilename); if (((string.Compare(extension, ".resx", StringComparison.OrdinalIgnoreCase) == 0) || (string.Compare(extension, ".restext", StringComparison.OrdinalIgnoreCase) == 0)) || (string.Compare(extension, ".resources", StringComparison.OrdinalIgnoreCase) == 0)) { builder.Append(Path.GetFileNameWithoutExtension(itemCultureInfo.cultureNeutralFilename)); if ((itemCultureInfo.culture != null) && (itemCultureInfo.culture.Length > 0)) { builder.Append(".").Append(itemCultureInfo.culture); } if (string.Equals(extension, ".resources", StringComparison.OrdinalIgnoreCase)) { builder.Append(extension); } } else { builder.Append(Path.GetFileName(itemCultureInfo.cultureNeutralFilename)); if ((prependCultureAsDirectory && (itemCultureInfo.culture != null)) && (itemCultureInfo.culture.Length > 0)) { builder.Insert(0, Path.DirectorySeparatorChar); builder.Insert(0, itemCultureInfo.culture); } } } return(builder.ToString()); }