0

我继承了一个使用 Microsoft.CSharp.CSharpCodeProvider 的项目,该项目现已成为旧版,因此我已切换到新的 Roslyn 版本 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,如下所述:

问题 50241006

现在我想为我正在编译的项目添加使用 NuGet 包的功能,最好是在 SDK 样式的 .csproj 文件中使用较新的包引用格式。

我的问题是使用 Microsoft.CodeAnalysis 会更好吗?Project.GetCompilationAsync比 CSharpCodeProvider.CompileAssemblyFromSource(),如果是这样怎么办?我说得更好,因为它看起来像 DotNetCompilerPlatform 是由 APS.NET 团队生产的,而且我没有使用 ASP.NET(但它似乎仍然可以工作)。( ref ) 我无法很好地概述这两者之间的区别,或者为什么后者甚至存在。

请注意,我对通过 CodeDom API 生成代码不感兴趣,我想编译在我的应用程序部署后创建的用户代码,并且该代码可能依赖于包。

我不只是尝试它的原因是我不知道如何加载 Microsoft.CodeAnalysis.Project。它没有构造函数,但可以从没有构造函数的解决方案中获得,而后者又可以从工作空间获得,工作空间有一个需要 HostServices 的构造函数,如果你有工作空间,可以通过工厂方法创建传递给它。

我仍然不确定 CodeAnalysis 是否适合从源代码编译或仅编译通过 CodeDom 生成的内容。

谢谢。

4

0 回答 0