我可以从MsBuild任务类中访问MsBuild工作区吗?

我可以从MsBuild任务类中访问MsBuild工作区吗?,msbuild,roslyn,Msbuild,Roslyn,据我所知,Roslyn已经引入了工作空间的概念。工作区的一个实现是MsBuildWorkspace 我的问题是,我可以从自定义构建任务中访问代表正在构建的项目的Roslyn工作区吗 我怀疑这就是MsBuildWorkspace的目的。如果是,我是否可以从自定义任务中的Execute方法(源自Microsoft.Build.Utilities.task)访问此工作区 如果您想知道为什么,我需要遍历正在构建的项目的其他方面。 仅访问任务的特定输入文件以生成输出是不够的 我怀疑这就是MsBuildWo

据我所知,Roslyn已经引入了工作空间的概念。工作区的一个实现是MsBuildWorkspace

我的问题是,我可以从自定义构建任务中访问代表正在构建的项目的Roslyn工作区吗

我怀疑这就是MsBuildWorkspace的目的。如果是,我是否可以从自定义任务中的
Execute
方法(源自
Microsoft.Build.Utilities.task
)访问此工作区

如果您想知道为什么,我需要遍历正在构建的项目的其他方面。 仅访问任务的特定输入文件以生成输出是不够的

我怀疑这就是MsBuildWorkspace的目的

否。
MsBuildWorkspace
的要点是将MSBuild项目或解决方案解析到Roslyn工作区中

MSBuild本身(实际运行MSBuild任务的部分)根本不使用Roslyn(它只调用C#编译任务,该任务是使用Roslyn实现的),因此您无法获取现有的
MsBuildWorkspace


您可以从项目文件创建自己的
MsBuildWorkspace

以及它不起作用的技术原因:MsBuildWorkspace在后台启动生成以确定项目中的内容。当生成已经发生时,这不起作用。@JasonMalinowski:你是说当生成由Roslyn启动时,无法获取原始的
MsBuildWorkspace
?更简单的原因是:并非所有生成都由Roslyn启动。这不仅仅是因为你无法访问某些虚构的原始MsBuildWorkspace,尝试构造任何MsBuildWorkspace都会触发死锁。@KevinPilch Bisson:我不知道。为什么?MSBuild是否使用非重入安全全局状态(eek)?找到解决方案了吗?这太疯狂了,我甚至不想构建,我想在构建任务中使用Roslyn进行代码分析,但打开解决方案时出错。