微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Project.GetCompilationAsync() 与 CSharpCodeProvider.CompileAssemblyFromSource() 用于在运行时使用 Roslyn 编译源代码

如何解决Project.GetCompilationAsync() 与 CSharpCodeProvider.CompileAssemblyFromSource() 用于在运行时使用 Roslyn 编译源代码

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

questions 50241006

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

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

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

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

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

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。