Ejemplo n.º 1
0
 public Project(ProjectModuleOptions options, string projDir, SatelliteAssemblyFinder satelliteAssemblyFinder)
 {
     if (options == null)
         throw new ArgumentNullException();
     this.options = options;
     this.projDir = projDir;
     this.satelliteAssemblyFinder = satelliteAssemblyFinder;
     this.files = new List<ProjectFile>();
     this.defaultNamespace = new DefaultNamespaceFinder(options.Module).Find();
     this.filename = Path.Combine(projDir, Path.GetFileName(projDir) + options.Language.ProjectFileExtension);
     this.assemblyName = options.Module.Assembly == null ? string.Empty : options.Module.Assembly.Name.String;
     this.projectTypeGuids = new HashSet<Guid>();
     this.PropertiesFolder = CalculatePropertiesFolder();
     this.extraAssemblyReferences = new HashSet<string>();
     this.languageGuid = CalculateLanguageGuid(options.Language);
 }
Ejemplo n.º 2
0
 public Project(ProjectModuleOptions options, string projDir, SatelliteAssemblyFinder satelliteAssemblyFinder)
 {
     if (options == null)
     {
         throw new ArgumentNullException();
     }
     this.options = options;
     this.projDir = projDir;
     this.satelliteAssemblyFinder = satelliteAssemblyFinder;
     this.files                   = new List <ProjectFile>();
     this.defaultNamespace        = new DefaultNamespaceFinder(options.Module).Find();
     this.filename                = Path.Combine(projDir, Path.GetFileName(projDir) + options.Language.ProjectFileExtension);
     this.assemblyName            = options.Module.Assembly == null ? string.Empty : options.Module.Assembly.Name.String;
     this.projectTypeGuids        = new HashSet <Guid>();
     this.PropertiesFolder        = CalculatePropertiesFolder();
     this.extraAssemblyReferences = new HashSet <string>();
     this.languageGuid            = CalculateLanguageGuid(options.Language);
 }
Ejemplo n.º 3
0
 public Project(ProjectModuleOptions options, string projDir, SatelliteAssemblyFinder satelliteAssemblyFinder, Func <TextWriter, IDecompilerOutput> createDecompilerOutput)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     this.Options   = options;
     this.Directory = projDir;
     this.satelliteAssemblyFinder = satelliteAssemblyFinder;
     this.createDecompilerOutput  = createDecompilerOutput;
     this.Files                   = new List <ProjectFile>();
     this.DefaultNamespace        = new DefaultNamespaceFinder(options.Module).Find();
     this.Filename                = Path.Combine(projDir, Path.GetFileName(projDir) + options.Language.ProjectFileExtension);
     this.AssemblyName            = options.Module.Assembly == null ? string.Empty : options.Module.Assembly.Name.String;
     this.ProjectTypeGuids        = new HashSet <Guid>();
     this.PropertiesFolder        = CalculatePropertiesFolder();
     this.ExtraAssemblyReferences = new HashSet <string>();
     this.LanguageGuid            = CalculateLanguageGuid(options.Language);
 }
Ejemplo n.º 4
0
            public void Execute(ExportToProjectVM vm)
            {
                vm.ProgressMinimum = 0;
                vm.ProgressMaximum = 1;
                vm.TotalProgress = 0;
                vm.IsIndeterminate = false;
                Task.Factory.StartNew(() => {
                    AppCulture.InitializeCulture();
                    var decompilationContext = new DecompilationContext {
                        CancellationToken = cancellationTokenSource.Token,
                        GetDisableAssemblyLoad = () => owner.fileTreeView.FileManager.DisableAssemblyLoad(),
                    };
                    var options = new ProjectCreatorOptions(vm.Directory, cancellationTokenSource.Token);
                    options.ProjectVersion = vm.ProjectVersion;
                    if (vm.CreateSolution)
                        options.SolutionFilename = vm.SolutionFilename;
                    options.Logger = this;
                    options.ProgressListener = this;

                    bool hasProjectGuid = vm.ProjectGuid.Value != null;
                    string guidFormat = null;
                    int guidNum = 0;
                    if (hasProjectGuid) {
                        string guidStr = vm.ProjectGuid.Value.ToString();
                        guidNum = int.Parse(guidStr.Substring(36 - 8, 8), NumberStyles.HexNumber);
                        guidFormat = guidStr.Substring(0, 36 - 8) + "{0:X8}";
                    }
                    foreach (var module in modules.OrderBy(a => a.Location, StringComparer.InvariantCultureIgnoreCase)) {
                        var projOpts = new ProjectModuleOptions(module, vm.Language, decompilationContext) {
                            DontReferenceStdLib = vm.DontReferenceStdLib,
                            UnpackResources = vm.UnpackResources,
                            CreateResX = vm.CreateResX,
                            DecompileXaml = vm.DecompileXaml,
                            ProjectGuid = hasProjectGuid ? new Guid(string.Format(guidFormat, guidNum++)) : Guid.NewGuid(),
                        };
                        if (bamlDecompiler != null) {
                            var o = BamlDecompilerOptions.Create(vm.Language);
                            projOpts.DecompileBaml = (a, b, c, d) => bamlDecompiler.Decompile(a, b, c, o, d);
                        }
                        options.ProjectModules.Add(projOpts);
                    }
                    var creator = new MSBuildProjectCreator(options);

                    creator.Create();
                    if (vm.CreateSolution)
                        fileToOpen = creator.SolutionFilename;
                    else
                        fileToOpen = creator.ProjectFilenames.FirstOrDefault();
                }, cancellationTokenSource.Token)
                .ContinueWith(t => {
                    var ex = t.Exception;
                    if (ex != null)
                        Error(string.Format(dnSpy_Resources.ErrorExceptionOccurred, ex));
                    EmtpyErrorList();
                    vm.OnExportComplete();
                    if (!vm.ExportErrors) {
                        dlg.Close();
                        if (vm.OpenProject)
                            OpenProject();
                    }
                }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
            }
Ejemplo n.º 5
0
            public void Execute(ExportToProjectVM vm)
            {
                vm.ProgressMinimum = 0;
                vm.ProgressMaximum = 1;
                vm.TotalProgress = 0;
                vm.IsIndeterminate = false;
                Task.Factory.StartNew(() => {
                    AppCulture.InitializeCulture();
                    var decompilationContext = new DecompilationContext {
                        CancellationToken = cancellationTokenSource.Token,
                        GetDisableAssemblyLoad = () => owner.fileTreeView.FileManager.DisableAssemblyLoad(),
                    };
                    var options = new ProjectCreatorOptions(vm.Directory, cancellationTokenSource.Token);
                    options.ProjectVersion = vm.ProjectVersion;
                    if (vm.CreateSolution)
                        options.SolutionFilename = vm.SolutionFilename;
                    options.Logger = this;
                    options.ProgressListener = this;
                    foreach (var module in modules) {
                        var projOpts = new ProjectModuleOptions(module, vm.Language, decompilationContext) {
                            DontReferenceStdLib = vm.DontReferenceStdLib,
                            UnpackResources = vm.UnpackResources,
                            CreateResX = vm.CreateResX,
                            DecompileXaml = vm.DecompileXaml,
                        };
                        if (owner.bamlDecompiler != null) {
                            var o = BamlDecompilerOptions.Create(vm.Language);
                            projOpts.DecompileBaml = (a, b, c, d) => owner.bamlDecompiler.Value.Decompile(a, b, c, o, d);
                        }
                        options.ProjectModules.Add(projOpts);
                    }
                    var creator = new MSBuildProjectCreator(options);

                    creator.Create();
                    if (vm.CreateSolution)
                        fileToOpen = creator.SolutionFilename;
                    else
                        fileToOpen = creator.ProjectFilenames.FirstOrDefault();
                }, cancellationTokenSource.Token)
                .ContinueWith(t => {
                    var ex = t.Exception;
                    if (ex != null)
                        Error(string.Format(dnSpy_Resources.ErrorExceptionOccurred, ex));
                    EmtpyErrorList();
                    vm.OnExportComplete();
                    if (!vm.ExportErrors) {
                        dlg.Close();
                        if (vm.OpenProject)
                            OpenProject();
                    }
                }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
            }