我正在尝试使用以下代码生成代码文件的语义模型:
IEnumerable<string> DefaultNamespaces =
new[]
{
"System","System.IO","System.Net","System.Linq","System.Text","System.Text.RegularExpressions","System.Collections.Generic"
};
//string runtimePath = @"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\{0}.dll";
//var z = MetadataReference.CreateFromFile(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Runtime.dll");
IEnumerable<MetadataReference> DefaultReferences =
new[]
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location)
};
CSharpCompilationOptions DefaultCompilationOptions =
new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary).WithOverflowChecks(true).WithOptimizationLevel(OptimizationLevel.Release).WithUsings(DefaultNamespaces);
var compilation = CSharpCompilation.Create("Test.dll", new SyntaxTree[] { syntaxTree }, DefaultReferences, DefaultCompilationOptions);
var result = compilation.GetSemanticModel(syntaxTree, true);
但是行:
IEnumerable<MetadataReference> DefaultReferences =
new[]
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location)
};
抛出异常:
无法加载文件或程序集&System; System.Reflection.Metadata。
请帮我解决这个问题。
答案 0 :(得分:0)
您需要在项目中的该引用的属性中将Copy Local
设置为true(如果没有引用,则从NuGet添加它)。
Roslyn在运行时需要这个DLL。