예제 #1
0
 /// <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());
     }
 }
예제 #2
0
 /// <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());
     }
 }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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();
        }
예제 #8
0
        /// <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();
        }
예제 #9
0
 /// <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))));
 }
예제 #10
0
 /// <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);
 }
예제 #11
0
 /// <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);
 }