gpt4 book ai didi

visual-studio - 作为重构的一部分,将新项目添加到解决方案中

转载 作者:行者123 更新时间:2023-12-04 06:25:20 25 4
gpt4 key购买 nike

有没有办法从 CodeAction 向解决方案添加新项目类(class)?

语境:

我有我的 CodeRefactoringProvider生成一些代码,我想将该代码放在一个新项目中。

我有 CodeRefactoringProviderCodeAction为此目的实现并尝试从我从 CodeRefactoringContext 获得的解决方案实例中添加项目喜欢

 context.RegisterRefactoring(
CodeAction.Create("Create New Project",
(c)=>
Task.Run(
()=>
{
var proj = context.Document.Project.Solution.AddProject("NewProject", "NewProject", "C#");
return proj.Solution;
})
));

这给了我
    System.AggregateException : One or more errors occurred. ---> Adding projects is not supported.
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout,CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedAction.InvokeWorker(Func`1 getFromDocument,IProgressTracker progressTracker,CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedAction.<>c__DisplayClass18_0.<InvokeCore>b__0()
at Microsoft.CodeAnalysis.Extensions.IExtensionManagerExtensions.PerformAction(IExtensionManager extensionManager,Object extension,Action action)
---> (Inner Exception #0) System.NotSupportedException : Adding projects is not supported.
at Microsoft.CodeAnalysis.Workspace.CheckAllowedSolutionChanges(SolutionChanges solutionChanges)
at Microsoft.CodeAnalysis.Workspace.TryApplyChanges(Solution newSolution,IProgressTracker progressTracker)
at Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem.VisualStudioWorkspaceImpl.TryApplyChanges(Solution newSolution,IProgressTracker progressTracker)
at Microsoft.CodeAnalysis.CodeActions.ApplyChangesOperation.TryApply(Workspace workspace,IProgressTracker progressTracker,CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Editor.Implementation.CodeActions.CodeActionEditHandlerService.ProcessOperations(Workspace workspace,ImmutableArray`1 operations,IProgressTracker progressTracker,CancellationToken cancellationToken)
at async Microsoft.CodeAnalysis.Editor.Implementation.CodeActions.CodeActionEditHandlerService.ApplyAsync(<Unknown Parameters>)<---

我尝试使用 IVsSolution 添加项目服务但出现错误:
 The operation could not be completed. A null reference pointer was passed to the stub. 

那么,如何在解决方案中创建一个新项目?

最佳答案

实际上,您需要操作 VS UI,而不是解决方案文件或其表示形式 ( context.Document )。否则,我希望您需要手动操作所有众所周知的“先保存更改”功能。什么复杂。

因此你应该调用 VS UI 方法(意味着 COM):Solution2.AddFromFile(String, Boolean)
https://docs.microsoft.com/en-us/dotnet/api/envdte80.solution2.addfromfile?view=visualstudiosdk-2017#EnvDTE80_Solution2_AddFromFile_System_String_System_Boolean_

此调用将用作宏,并且似乎符合您的预期。

关于visual-studio - 作为重构的一部分,将新项目添加到解决方案中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53162517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com