Ben*_*dEg 2 .net c# compilation mscorlib roslyn
我尝试使用Roslyn编译一些代码,但收到以下错误消息:
CS0012:类型'Func <,>'在未引用的程序集中定义.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.
我仍然Func<, >对这条消息感到疑惑,因为应该在mscorelib而不是在System.Runtime.我已经搜索过这个bug,只找到了一个应该有用的热修复,但是没有.
有没有人与.net 4.5.1和最新的Roslyn版本有类似的问题?
谢谢!
好的,找到了解决方案.System.Runtime似乎是问题(一开始我认为不是一个有问题的libs的问题).
我需要使用以下代码片段:
List<PortableExecutableReference> refs = new List<PortableExecutableReference>();
refs.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "mscorlib.dll")));
refs.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.dll")));
refs.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Core.dll")));
refs.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Runtime.dll")));
refs.Add(MetadataReference.CreateFromFile(Assembly.GetEntryAssembly().Location));
Run Code Online (Sandbox Code Playgroud)
我最近遇到了类似的问题。我添加了以下行并解决了问题:
assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default
Run Code Online (Sandbox Code Playgroud)
整个CSharpCompilation对象初始化如下所示:
var compilation = CSharpCompilation.Create(
assemblyName,
new[] { syntaxTree },
references,
new CSharpCompilationOptions(
OutputKind.DynamicallyLinkedLibrary,
optimizationLevel: OptimizationLevel.Release,
assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |