Ejemplo n.º 1
0
 protected virtual void DetachProjectBuilderEventHandlers(BaseProjectBuilder projectBuilder)
 {
     projectBuilder.ProjectFileCreated       -= OnProjectFileCreated;
     projectBuilder.ProjectGenerationFailure -= OnProjectGenerationFailure;
     projectBuilder.ResourceWritingFailure   -= OnResourceWritingFailure;
     projectBuilder.ExceptionThrown          -= OnExceptionThrown;
 }
Ejemplo n.º 2
0
        protected TimeSpan RunInternal(AssemblyDefinition assembly, GeneratorProjectInfo projectInfo, ProjectGenerationSettings settings)
        {
            OnProjectGenerationStarted(assembly);

            string projFilePath = Path.Combine(projectInfo.Out, Path.GetFileNameWithoutExtension(projectInfo.Target) + projectInfo.Language.VSProjectFileExtension + (settings.JustDecompileSupportedProjectType ? string.Empty : MSBuildProjectBuilder.ErrorFileExtension));

            DecompilationPreferences preferences = new DecompilationPreferences();

            preferences.WriteFullNames              = false;
            preferences.WriteDocumentation          = projectInfo.AddDocumentation;
            preferences.RenameInvalidMembers        = projectInfo.RenameInvalidMembers;
            preferences.WriteLargeNumbersInHex      = projectInfo.WriteLargeNumbersInHex;
            preferences.DecompileDangerousResources = projectInfo.DecompileDangerousResources;

            IFrameworkResolver      frameworkResolver      = new ConsoleFrameworkResolver(projectInfo.FrameworkVersion);
            ITargetPlatformResolver targetPlatformResolver = TargetPlatformResolver.Instance;

            BaseProjectBuilder projectBuilder = GetProjectBuilder(assembly, projectInfo, settings, projectInfo.Language, projFilePath, preferences, frameworkResolver, targetPlatformResolver);

            AttachProjectBuilderEventHandlers(projectBuilder);

            //As per https://github.com/telerik/JustDecompileEngine/pull/2
            DateTime startTime = DateTime.UtcNow;

            projectBuilder.BuildProject();
            TimeSpan projectGenerationTime = DateTime.UtcNow - startTime;

            DetachProjectBuilderEventHandlers(projectBuilder);

            return(projectGenerationTime);
        }
Ejemplo n.º 3
0
        public override Task <CreateProjectResponse> CreateProject(CreateProjectRequest request, ServerCallContext context)
        {
            if (string.IsNullOrEmpty(request.OutputPath) || string.IsNullOrEmpty(request.AssemblyFilePath))
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Invalid argument"));
            }

            bool decompileDangerousResources        = request.DecompileDangerousResources;
            VisualStudioVersion visualStudioVersion = this.GetProjectCreationVSVersion(request.ProjectVisualStudioVersion);
            ILanguage           language            = LanguageFactory.GetLanguage(CSharpVersion.V7);

            AssemblyDefinition        assembly = GlobalAssemblyResolver.Instance.GetAssemblyDefinition(request.AssemblyFilePath);
            ProjectGenerationSettings settings = ProjectGenerationSettingsProvider.GetProjectGenerationSettings(request.AssemblyFilePath, NoCacheAssemblyInfoService.Instance,
                                                                                                                EmptyResolver.Instance, visualStudioVersion, language, TargetPlatformResolver.Instance);

            DecompilationPreferences preferences = new DecompilationPreferences()
            {
                WriteFullNames              = false,
                WriteDocumentation          = true,
                RenameInvalidMembers        = true,
                WriteLargeNumbersInHex      = false,
                DecompileDangerousResources = decompileDangerousResources
            };

            BaseProjectBuilder projectBuilder         = this.GetProjectBuilder(assembly, request.AssemblyFilePath, visualStudioVersion, settings, language, request.OutputPath, preferences, EmptyResolver.Instance, TargetPlatformResolver.Instance);
            string             generationErrorMessage = this.CreateProject(projectBuilder);

            return(Task.FromResult(new CreateProjectResponse()
            {
                ErrorMessage = generationErrorMessage
            }));
        }
Ejemplo n.º 4
0
        private string CreateProject(BaseProjectBuilder projectBuilder)
        {
            StringBuilder builder = new StringBuilder();

            BaseProjectBuilder.ProjectGenerationFailureEventHandler OnProjectGenerationFailure = (s, e) =>
            {
                builder.AppendLine(e.Message);
            };
            projectBuilder.ProjectGenerationFailure += OnProjectGenerationFailure;

            projectBuilder.BuildProject();

            projectBuilder.ProjectGenerationFailure -= OnProjectGenerationFailure;

            return(builder.ToString());
        }
Ejemplo n.º 5
0
        private BaseProjectBuilder GetProjectBuilder(AssemblyDefinition assembly, GeneratorProjectInfo projectInfo, ProjectGenerationSettings settings, ILanguage language, string projFilePath, DecompilationPreferences preferences, IFrameworkResolver frameworkResolver, ITargetPlatformResolver targetPlatformResolver)
        {
            TargetPlatform     targetPlatform = targetPlatformResolver.GetTargetPlatform(assembly.MainModule.FilePath, assembly.MainModule);
            BaseProjectBuilder projectBuilder = null;

            if (targetPlatform == TargetPlatform.NetCore)
            {
                projectBuilder = new NetCoreProjectBuilder(projectInfo.Target, projFilePath, language, preferences, null, NoCacheAssemblyInfoService.Instance, projectInfo.VisualStudioVersion, settings);
            }
            else if (targetPlatform == TargetPlatform.WinRT)
            {
                projectBuilder = new WinRTProjectBuilder(projectInfo.Target, projFilePath, language, preferences, null, NoCacheAssemblyInfoService.Instance, projectInfo.VisualStudioVersion, settings);
            }
            else
            {
                projectBuilder = new MSBuildProjectBuilder(projectInfo.Target, projFilePath, language, frameworkResolver, preferences, null, NoCacheAssemblyInfoService.Instance, projectInfo.VisualStudioVersion, settings);
            }

            return(projectBuilder);
        }
Ejemplo n.º 6
0
 protected override void DetachProjectBuilderEventHandlers(BaseProjectBuilder projectBuilder)
 {
 }