Roslyn版本1.2。*具有一个名为MetadataReference.CreateAssemblyReference()的函数,该函数采用程序集的显示名称并返回适当的MetadataReference对象。例如,我能够添加对各种程序集的引用,如下所示:

Compilation compilation = Compilation.Create("HelloWorld")
                .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"),
                    MetadataReference.CreateAssemblyReference("System.Linq"),
                    MetadataReference.CreateAssemblyReference("System.Data.Linq"),
                    MetadataReference.CreateAssemblyReference("System.Data"),
                    MetadataReference.CreateAssemblyReference("System.Data.DataSetExtensions"),
                    MetadataReference.CreateAssemblyReference("System.Xml"),
                    MetadataReference.CreateAssemblyReference("System.Xml.Linq"),
                    MetadataReference.CreateAssemblyReference("System"),
                    MetadataReference.CreateAssemblyReference("System.Core")
                //MetadataReference.CreateAssemblyReference("System.Core"),
                /*MetadataReference.CreateAssemblyReference("System")*/)
                .AddSyntaxTrees(tree);

但是,使用Microsoft.CodeAnalysis软件包(这是可以从Nuget安装的最新软件包)似乎无法实现。这个软件包在MetadataReference内部有一些功能-但是它们需要一个Assembly或一个文件路径。

在较新的编译器软件包中是否存在上述提到的更简单的功能?

最佳答案

您可以使用CLR加载程序加载程序集,并从以下位置查找程序集的加载位置:

typeof(DataSetExtensions).Assembly.Location

关于c# - 在Roslyn与Microsoft.CodeAnalysis中添加MetadataReference,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27518982/

10-09 16:43