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 })); }
public override Task <GetProjectCreationMetadataResponse> GetProjectCreationMetadata(GetProjectCreationMetadataRequest request, ServerCallContext context) { VisualStudioVersion visualStudioVersion = this.GetProjectCreationVSVersion(request.ProjectVisualStudioVersion); AssemblyDefinition assemblyDefinition = GlobalAssemblyResolver.Instance.GetAssemblyDefinition(request.AssemblyFilePath); ILanguage language = LanguageFactory.GetLanguage(CSharpVersion.V7); ProjectGenerationSettings settings = ProjectGenerationSettingsProvider.GetProjectGenerationSettings(request.AssemblyFilePath, NoCacheAssemblyInfoService.Instance, EmptyResolver.Instance, visualStudioVersion, language, TargetPlatformResolver.Instance); bool containsDangerousResources = assemblyDefinition.Modules.SelectMany(m => m.Resources).Any(r => DangerousResourceIdentifier.IsDangerousResource(r)); string normalizedVSProjectFileExtension = language.VSProjectFileExtension.TrimStart('.'); string generatedProjectExtension = normalizedVSProjectFileExtension + (settings.JustDecompileSupportedProjectType ? string.Empty : MSBuildProjectBuilder.ErrorFileExtension); return(Task.FromResult(new GetProjectCreationMetadataResponse() { ContainsDangerousResources = containsDangerousResources, ProjectFileMetadata = new ProjectFileMetadata() { IsDecompilerSupportedProjectType = settings.JustDecompileSupportedProjectType, IsVSSupportedProjectType = settings.VisualStudioSupportedProjectType, ProjectTypeNotSupportedErrorMessage = settings.ErrorMessage ?? string.Empty, ProjectFileName = assemblyDefinition.Name.Name, ProjectFileExtension = generatedProjectExtension } })); }
protected ProjectGenerationSettings GetSettings(GeneratorProjectInfo projectInfo) { return(ProjectGenerationSettingsProvider.GetProjectGenerationSettings(projectInfo.Target, NoCacheAssemblyInfoService.Instance, new ConsoleFrameworkResolver(projectInfo.FrameworkVersion), projectInfo.VisualStudioVersion, projectInfo.Language, TargetPlatformResolver.Instance)); }