private void OpenIssues(object sender, RoutedEventArgs e)
        {
            MetroButton senderButton = (MetroButton)sender;
            AssemblyGenerationResult assemblyGenerationResult = (AssemblyGenerationResult)senderButton.Tag;

            LogViewer viewer = new LogViewer();

            viewer.Log   = assemblyGenerationResult.Log.LogData;
            viewer.Owner = App.MainWindow;
            viewer.Show();
        }
        private async Task <object> GenerateAllAssemblies(IProgress <string> progress, CancellationToken cancelToken)
        {
            var document = App.MainWindow.Document;

            LocalizationAppDomain appDomain = await StringsRetriever.CreateAppDomain(document.PathToBinaries);

            List <AssemblyGenerationResult> resultsList = new List <AssemblyGenerationResult>();

            Dictionary <string, LoadedAssembly> loadedAssemblies = new Dictionary <string, LoadedAssembly>();

            foreach (var cultureItem in Cultures)
            {
                if (!cultureItem.IsSelected)
                {
                    continue;
                }

                foreach (var assemblyItem in Assemblies)
                {
                    if (!assemblyItem.IsSelected)
                    {
                        continue;
                    }

                    string satteliteTargetFileName  = System.IO.Path.GetFileName(assemblyItem.Assembly.Assembly.DefaultResourceFile);
                    AssemblyGenerationResult result = new AssemblyGenerationResult(satteliteTargetFileName, cultureItem.Culture.CultureCode);

                    if (cancelToken.IsCancellationRequested)
                    {
                        result.IsError = true;
                        result.Log.LogLine(StringUtils.String("AssemblyResult_Cancelled"), LogSeverity.Info);
                        result.ResultMessage = StringUtils.String("AssemblyResult_Cancelled");
                        continue;
                    }

                    try
                    {
                        string assemblyToLoad = System.IO.Path.Combine(document.PathToBinaries,
                                                                       assemblyItem.Assembly.Assembly.DefaultResourceFile);
                        LoadedAssembly loadedAssembly;

                        if (loadedAssemblies.ContainsKey(assemblyToLoad))
                        {
                            loadedAssembly = loadedAssemblies[assemblyToLoad];
                        }
                        else
                        {
                            loadedAssembly = await Task.Run <LoadedAssembly>(() =>
                            {
                                return(appDomain.LoadAssembly(assemblyToLoad));
                            });

                            loadedAssemblies.Add(assemblyToLoad, loadedAssembly);
                        }

                        string outputDirectory = System.IO.Path.Combine(document.PathToBinaries, cultureItem.Culture.CultureCode);

                        if (!Directory.Exists(outputDirectory))
                        {
                            Directory.CreateDirectory(outputDirectory);
                        }

                        string satteliteTargetFullPath = System.IO.Path.Combine(outputDirectory, satteliteTargetFileName);

                        progress.Report(StringUtils.String("GenerationAssemblyForCulture", satteliteTargetFileName, cultureItem.Culture.CultureCode));

                        await Task.Run(() =>
                        {
                            List <BamlString> translatedStrings = document.ExportApi.GetTranslatedStrings(
                                assemblyItem.Assembly.Assembly.AssemblyFile, cultureItem.Culture.CultureCode);
                            loadedAssembly.GenerateSatteliteAssembly(cultureItem.Culture.CultureCode, translatedStrings, satteliteTargetFullPath);
                        });

                        result.ResultMessage = StringUtils.String("AssemblyResult_Created");
                        resultsList.Add(result);
                    }
                    catch (Exception e)
                    {
                        result.IsError = true;
                        result.Log.LogLine(e.Message, LogSeverity.Error);
                        result.ResultMessage = StringUtils.String("AssemblyResult_Exception");

                        resultsList.Add(result);
                        continue;
                    }
                }
            }

            return(resultsList);
        }