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或一个文件路径。
上面提到的更简单的函数是否存在于较新的编译器包中?
答案 0 :(得分:2)
您可以使用CLR加载程序加载程序集并找出它的加载位置:
typeof(DataSetExtensions).Assembly.Location