/// <summary> /// Gera o Xap para memória. /// </summary> /// <param name="configuration"></param> /// <param name="entries"></param> /// <returns></returns> public static byte[] XapToMemory(IXapConfiguration configuration, XapEntry[] entries) { using (var ms = new MemoryStream()) { XapFiles(configuration, new ZipArchive(ms, FileAccess.Write), entries); return(ms.ToArray()); } }
/// <summary> /// Gera o Xap para memória. /// </summary> /// <param name="configuration"></param> /// <param name="directoryName"></param> /// <returns></returns> public static byte[] XapToMemory(IXapConfiguration configuration, string directoryName) { using (var ms = new MemoryStream()) { XapFiles(configuration, new ZipArchive(ms, FileAccess.Write), directoryName); return(ms.ToArray()); } }
/// <summary> /// Anexa o uriPrefix da configuração, a menos que o caminho seja absoluto. /// </summary> /// <param name="configuration"></param> /// <param name="path"></param> /// <returns></returns> private static Uri GetUri(IXapConfiguration configuration, string path) { Uri uri = new Uri(path, UriKind.RelativeOrAbsolute); string prefix = configuration.UrlPrefix; if (prefix != "" && !IsPathRooted(uri)) { uri = new Uri(prefix + path, UriKind.RelativeOrAbsolute); } return(uri); }
/// <summary> /// Recupera a lista de linguagens de assemblies que serão automaticamente adicionadas para o XAP. /// </summary> /// <param name="configuration"></param> /// <param name="langs"></param> /// <returns></returns> private static IList <Uri> GetLanguageAssemblies(IXapConfiguration configuration, IEnumerable <LanguageInfo> langs) { List <Uri> assemblies = new List <Uri>(); foreach (LanguageInfo lang in langs) { foreach (string asm in lang.Assemblies) { assemblies.Add(GetUri(configuration, asm)); } } return(assemblies); }
/// <summary> /// Pesquisa o diretório das aplicações para encontrar todos os arquivo compatíveis com as linguagens configuradas. /// </summary> /// <param name="configuration"></param> /// <param name="entries"></param> /// <returns></returns> internal static ICollection <LanguageInfo> FindSourceLanguages(IXapConfiguration configuration, XapEntry[] entries) { Dictionary <LanguageInfo, bool> result = new Dictionary <LanguageInfo, bool>(); foreach (string file in entries.Select(f => f.Name)) { string ext = Path.GetExtension(file); LanguageInfo lang; if (configuration.Languages.TryGetValue(ext.ToLower(), out lang)) { result[lang] = true; } } return(result.Keys); }
/// <summary> /// Pesquisa o diretório das aplicações para encontrar todos os arquivo compatíveis com as linguagens configuradas. /// </summary> /// <param name="configuration"></param> /// <param name="directoryName"></param> /// <returns></returns> internal static ICollection <LanguageInfo> FindSourceLanguages(IXapConfiguration configuration, string directoryName) { Dictionary <LanguageInfo, bool> result = new Dictionary <LanguageInfo, bool>(); foreach (string file in Directory.GetFiles(directoryName, "*", SearchOption.AllDirectories)) { string ext = Path.GetExtension(file); LanguageInfo lang; if (configuration.Languages.TryGetValue(ext.ToLower(), out lang)) { result[lang] = true; } } return(result.Keys); }
/// <summary> /// Adiciona os arquivos do diretório para o zip usando o padrão Xap. /// </summary> /// <param name="configuration"></param> /// <param name="zip"></param> /// <param name="entries"></param> public static void XapFiles(IXapConfiguration configuration, ZipArchive zip, XapEntry[] entries) { ICollection <LanguageInfo> langs = FindSourceLanguages(configuration, entries); IList <Uri> assemblies; assemblies = GetLanguageAssemblies(configuration, langs); using (Stream appManifest = zip.Create("AppManifest.xaml")) configuration.ManifestTemplate.Generate(assemblies).Save(appManifest); foreach (var entry in entries) { zip.CopyFromStream(entry.Stream, entry.LastWriteTime, entry.Name); } GenerateLanguagesConfig(zip, langs); zip.Close(); }
/// <summary> /// Adiciona os arquivos do diretório para o zip usando o padrão Xap. /// </summary> /// <param name="configuration"></param> /// <param name="zip"></param> /// <param name="directoryName"></param> public static void XapFiles(IXapConfiguration configuration, ZipArchive zip, string directoryName) { ICollection <LanguageInfo> langs = FindSourceLanguages(configuration, directoryName); string manifestPath = Path.Combine(directoryName, "AppManifest.xaml"); IList <Uri> assemblies; if (File.Exists(manifestPath)) { assemblies = GetManifestAssemblies(manifestPath); } else { assemblies = GetLanguageAssemblies(configuration, langs); using (Stream appManifest = zip.Create("AppManifest.xaml")) configuration.ManifestTemplate.Generate(assemblies).Save(appManifest); } AddAssemblies(zip, directoryName, assemblies); GenerateLanguagesConfig(zip, langs); zip.CopyFromDirectory(directoryName, ""); zip.Close(); }
/// <summary> /// Gera o AppManifest.xaml. /// </summary> /// <param name="configuration"></param> /// <param name="dir"></param> /// <returns></returns> internal static System.Xml.XmlDocument GenerateManifest(IXapConfiguration configuration, string dir) { return(configuration.ManifestTemplate.Generate(GetLanguageAssemblies(configuration, FindSourceLanguages(configuration, dir)))); }
/// <summary> /// Gera o Xap para um arquivo para disco. /// </summary> /// <param name="configuration"></param> /// <param name="entries"></param> /// <param name="xapfile"></param> public static void XapToDisk(IXapConfiguration configuration, XapEntry[] entries, string xapfile) { using (var archive = new ZipArchive(xapfile, FileAccess.Write)) XapFiles(configuration, archive, entries); }
/// <summary> /// Gera o Xap para um arquivo para disco. /// </summary> /// <param name="configuration"></param> /// <param name="directoryName"></param> /// <param name="xapfile"></param> public static void XapToDisk(IXapConfiguration configuration, string directoryName, string xapfile) { using (var archive = new ZipArchive(xapfile, FileAccess.Write)) XapFiles(configuration, archive, directoryName); }