Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSBuildWorkspace.OpenSolutionAsync引发异常_C#_.net_Roslyn - Fatal编程技术网

C# MSBuildWorkspace.OpenSolutionAsync引发异常

C# MSBuildWorkspace.OpenSolutionAsync引发异常,c#,.net,roslyn,C#,.net,Roslyn,以下是完整的代码: MSBuildWorkspace msBuild = MSBuildWorkspace.Create(); Solution sln = await msBuild.OpenSolutionAsync(solutionPath);//NullReferenceException 其中solutionPath是有效的.slnVisual Studio 2015解决方案。我尝试了Winforms新项目和带有简单类的dll。在尝试阅读之前,我关闭了该解决方案,但这没有帮助。它仍然

以下是完整的代码:

MSBuildWorkspace msBuild = MSBuildWorkspace.Create();
Solution sln = await msBuild.OpenSolutionAsync(solutionPath);//NullReferenceException
其中
solutionPath
是有效的.slnVisual Studio 2015解决方案。我尝试了Winforms新项目和带有简单类的dll。在尝试阅读之前,我关闭了该解决方案,但这没有帮助。它仍然抛出NullReferenceException。 我正在使用VS2015。x64windows10

MSBuildWorkspace
是错误的
工作区类型吗?还有什么东西不见了吗

(NullReferenceException实际上是一个由方法引发的奇怪错误。这通常是由类似于mistakenNull.DoSomething()的东西引发的错误类型。)


编辑2-此代码位于解决方案中的dll项目中,该解决方案还包含一个调用此代码的简单Winforms项目。(因为Roslyn项目模板创建了一个dll项目。)也许这很重要


编辑-堆栈跟踪 异常:对象引用未设置为对象的实例

堆栈跟踪

   at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.GetReferences(CSharpCompilerInputs compilerInputs, ProjectInstance executedProject, IEnumerable`1& metadataReferences, IEnumerable`1& analyzerReferences)
   at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CreateProjectFileInfo(CSharpCompilerInputs compilerInputs, ProjectInstance executedProject)
   at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.<GetProjectFileInfoAsync>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<LoadProjectAsync>d__40.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<GetOrLoadProjectAsync>d__39.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<OpenSolutionAsync>d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at namespace1.RosTest.<RenameMethods>d__0.MoveNext() in C:\Users\...
位于Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.GetReferences(CSharpCompilerInputs、ProjectInstance executedProject、IEnumerable`1和metadataReferences、IEnumerable`1和analyzerReferences)
位于Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CreateProjectFileInfo(CSharpCompilerInputs compilerInputs,ProjectInstance executedProject)
在Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.d_u7.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
在Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d_u40.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d_u39.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d_u34.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中
在C:\Users\。。。

您需要确保在应用程序旁边包含
Microsoft.codealysis.CSharp.Workspaces.dll
和或
Microsoft.codealysis.VisualBasic.Workspaces.dll


工作区代码动态加载它们。

我也遇到了同样的问题,当我安装了正确版本的 下面链接中的“Microsoft.CodeAnalysis.CSharp”程序集


这可能会对某些人有所帮助,所以我在这里发帖。

“还有什么遗漏吗?”——好吧,首先是相当多的重要细节。至少,您需要为异常提供完整的堆栈跟踪。除此之外,花点时间想想这两行代码是否就是第三方独立再现问题所需的全部。如果你提供了足够的上下文让其他人完全理解这个问题,你就更有可能得到一个好的、有用的答案。@PeterDuniho谢谢。a) 我认为这些行足以重现错误,我遗漏了其他一些明显的行。b) 添加了堆栈跟踪。两者都被引用,还有
Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll
,这可能就是您的意思。此代码位于解决方案中的dll项目中,该解决方案也有一个调用此代码的简单Winforms项目。(因为Roslyn项目模板创建了一个dll项目。)也许这很重要。更新:虽然引用了
Microsoft.CodeAnalysis.CSharp.Workspaces.dll
,但向该命名空间添加using指令失败:
使用Microsoft.CodeAnalysis.CSharp.Workspaces-
命名空间“Microsoft.CodeAnalysis.CSharp”(是否缺少程序集引用?)中不存在类型或命名空间名称“Workspaces”
Microsoft.CodeAnalysis.CSharp.Workspaces.dll中没有公共类型,因此预期会出现using语句错误。即使引用了它,也不会将其复制到输出目录,除非您强制使用它。您能验证winforms应用程序的bin\debug目录是否存在dll吗?我相信它正在复制:他的堆栈已经显示CSharpProjectFileLoader存在。