在Roslyn与Microsoft.CodeAnalysis中添加MetadataReference

she*_*har 7 c# roslyn

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);
Run Code Online (Sandbox Code Playgroud)

但是,Microsoft.CodeAnalysis软件包似乎无法实现这一点(这是可以从Nuget安装的最新软件包).这个包里面有一些函数MetadataReference- 但它们需要一个Assembly或一个文件路径.

上面提到的更简单的函数是否存在于较新的编译器包中?

SLa*_*aks 2

您可以使用 CLR 加载程序加载程序集并找出它是从哪里加载的:

typeof(DataSetExtensions).Assembly.Location
Run Code Online (Sandbox Code Playgroud)