internal static string GetXomlManifestName(string fileName, string linkFileName, string rootNamespace, Stream binaryStream) { string str = string.Empty; string name = linkFileName; if ((name == null) || (name.Length == 0)) { name = fileName; } System.Workflow.ComponentModel.Compiler.Culture.ItemCultureInfo itemCultureInfo = System.Workflow.ComponentModel.Compiler.Culture.GetItemCultureInfo(name); if (binaryStream != null) { string str3 = null; try { XmlTextReader reader = new XmlTextReader(binaryStream); if ((reader.MoveToContent() == XmlNodeType.Element) && reader.MoveToAttribute("Class", "http://schemas.microsoft.com/winfx/2006/xaml")) { str3 = reader.Value; } } catch { } if ((str3 != null) && (str3.Length > 0)) { str = str3; if ((itemCultureInfo.culture != null) && (itemCultureInfo.culture.Length > 0)) { str = str + "." + itemCultureInfo.culture; } } } if (str.Length == 0) { if (!string.IsNullOrEmpty(rootNamespace)) { str = rootNamespace + "."; } string str4 = CreateManifestResourceName.MakeValidEverettIdentifier(Path.GetDirectoryName(itemCultureInfo.cultureNeutralFilename)); if (string.Compare(Path.GetExtension(itemCultureInfo.cultureNeutralFilename), ".resx", StringComparison.OrdinalIgnoreCase) == 0) { str = (str + Path.Combine(str4, Path.GetFileNameWithoutExtension(itemCultureInfo.cultureNeutralFilename))).Replace(Path.DirectorySeparatorChar, '.').Replace(Path.AltDirectorySeparatorChar, '.'); if ((itemCultureInfo.culture != null) && (itemCultureInfo.culture.Length > 0)) { str = str + "." + itemCultureInfo.culture; } return(str); } str = (str + Path.Combine(str4, Path.GetFileName(itemCultureInfo.cultureNeutralFilename))).Replace(Path.DirectorySeparatorChar, '.').Replace(Path.AltDirectorySeparatorChar, '.'); if ((itemCultureInfo.culture != null) && (itemCultureInfo.culture.Length > 0)) { str = itemCultureInfo.culture + Path.DirectorySeparatorChar + str; } } return(str); }
/// <summary> /// Utility function for creating a X#-style manifest name from /// a resource name. Note that this function is inspired by the similar C# function /// </summary> /// <param name="fileName">The file name of the dependent (usually a .resx)</param> /// <param name="linkFileName">The file name of the dependent (usually a .resx)</param> /// <param name="rootNamespace">The root namespace (usually from the project file). May be null</param> /// <param name="prependCultureAsDirectory">should the culture name be prepended to the manifest name as a path</param> /// <param name="dependentUponFileName">The file name of the parent of this dependency (usually a .cs file). May be null</param> /// <param name="culture">The override culture of this resource, if any</param> /// <param name="binaryStream">File contents binary stream, may be null</param> /// <param name="log">Task's TaskLoggingHelper, for logging warnings or errors</param> /// <returns>Returns the manifest name</returns> internal static string CreateManifestNameImpl ( string fileName, string linkFileName, bool prependCultureAsDirectory, string rootNamespace, string dependentUponFileName, string culture, Stream binaryStream, TaskLoggingHelper log ) { string embeddedFileName = linkFileName; // Use the link file name if there is one, otherwise, fall back to file name. if ((embeddedFileName == null) || (embeddedFileName.Length == 0)) { embeddedFileName = fileName; } Culture.ItemCultureInfo info = Culture.GetItemCultureInfo(embeddedFileName, dependentUponFileName); // If the item has a culture override, respect that. if (!string.IsNullOrEmpty(culture)) { info.culture = culture; } StringBuilder manifestName = new StringBuilder(); if (binaryStream != null) { // Resource depends on a form. Now, get the form's class name fully // qualified with a namespace. ExtractedClassName result = CreateXSharpManifestResourceName.GetFirstClassNameFullyQualified(fileName, binaryStream, log); if (result.IsInsideConditionalBlock && log != null) { log.LogWarningWithCodeFromResources("CreateManifestResourceName.DefinitionFoundWithinConditionalDirective", dependentUponFileName, embeddedFileName); } if ((result.Name != null) && (result.Name.Length > 0)) { manifestName.Append(result.Name); if ((info.culture != null) && (info.culture.Length > 0)) { manifestName.Append(".").Append(info.culture); } } } // If there's no manifest name at this point, then fall back to using the // RootNamespace+Filename_with_slashes_converted_to_dots if (manifestName.Length == 0) { // If Rootnamespace was null, then it wasn't set from the project resourceFile. // Empty namespaces are allowed. if ((rootNamespace != null) && (rootNamespace.Length > 0)) { manifestName.Append(rootNamespace).Append("."); } // Replace spaces in the directory name with underscores. Needed for compatibility with Everett. // Note that spaces in the file name itself are preserved. string everettCompatibleDirectoryName = CreateManifestResourceName.MakeValidEverettIdentifier(Path.GetDirectoryName(info.cultureNeutralFilename)); // only strip extension for .resx and .restext files string sourceExtension = Path.GetExtension(info.cultureNeutralFilename); if ( (0 == String.Compare(sourceExtension, ".resx", StringComparison.OrdinalIgnoreCase)) || (0 == String.Compare(sourceExtension, ".restext", StringComparison.OrdinalIgnoreCase)) || (0 == String.Compare(sourceExtension, ".resources", StringComparison.OrdinalIgnoreCase)) ) { manifestName.Append(Path.Combine(everettCompatibleDirectoryName, Path.GetFileNameWithoutExtension(info.cultureNeutralFilename))); // Replace all '\' with '.' manifestName.Replace(Path.DirectorySeparatorChar, '.'); manifestName.Replace(Path.AltDirectorySeparatorChar, '.'); // Append the culture if there is one. if ((info.culture != null) && (info.culture.Length > 0)) { manifestName.Append(".").Append(info.culture); } // If the original extension was .resources, add it back if (string.Equals(sourceExtension, ".resources", StringComparison.OrdinalIgnoreCase)) { manifestName.Append(sourceExtension); } } else { manifestName.Append(Path.Combine(everettCompatibleDirectoryName, Path.GetFileName(info.cultureNeutralFilename))); // Replace all '\' with '.' manifestName.Replace(Path.DirectorySeparatorChar, '.'); manifestName.Replace(Path.AltDirectorySeparatorChar, '.'); // Prepend the culture as a subdirectory if there is one. if (prependCultureAsDirectory) { if (info.culture != null && info.culture.Length > 0) { manifestName.Insert(0, Path.DirectorySeparatorChar); manifestName.Insert(0, info.culture); } } } } return(manifestName.ToString()); }