使用Roslyn

时间:2016-10-07 16:07:26

标签: c# roslyn

我试图在运行时使用Roslyn编译.cs文件。我相信我已经使用所需的nuget包配置错误。

  • 我有一个名为“ReadAndCompileSource”的方法,它读取.cs文件并使用CSharpCompilation.Create()
  • 编译它们。
  • 调试时我无法进入ReadAndCompileSource,只要输入函数就会抛出异常:

错误信息

System.IO.FileLoadException: Could not load file or assembly         
'System.Reflection.Metadata, Version=1.2.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
The located assembly's manifest definition does not match the assemblyreference. (Exception from HRESULT: 0x80131040) 

File name: 'System.Reflection.Metadata, Version=1.2.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'

=== Pre-bind state information ===
LOG: DisplayName = System.Reflection.Metadata, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 (Fully-specified)
LOG: Initial PrivatePath = NULL
Calling assembly : Microsoft.CodeAnalysis.CSharp, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Reflection.Metadata, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: Attempting download of new URL System.Reflection.Metadata.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Project References下列出的System.Reflection.Metadata版本的版本为1.3.0.0

我通过nuget控制台执行以下操作来安装Roslyn以供使用:

install-package Microsoft.Net.Compilers

install-package Microsoft.CodeAnalysis

尝试在被调用方法中调用任何基于Roslyn的方法会导致异常。

通过上述方法安装的Microsoft.CodeAnalysis.CSharp版本为1.3.2:https://www.nuget.org/packages/Microsoft.CodeAnalysis.CSharp/

其中需要相同版本的:https://www.nuget.org/packages/Microsoft.CodeAnalysis.Common/

反过来又需要System.Reflection.Metadata> = 1.3.0

这些对System.Reflection.Metadata 1.2.0.0的引用来自何处以及如何让我的项目恢复正常工作?

我因为这么多原因而对此感到困惑:

  1. 为什么是System.Reflection.Metadata 1.2.0.0。正在寻找而不是1.3?
  2. 为什么Microsoft.CodeAnalysis.Csharp在预绑定信息中以1.3.1而不是1.3.2列出?
  3. 我已经卸载并重新安装了Microsoft.CodeAnalysis.CSharp并且它的依赖项无数次,并且错误仍然存​​在。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

  1. 通过Nuget包管理器删除了与该问题相关的所有包。
  2. 使用grep查找项目文件夹中的相关包的所有实例(CodeAnalysis& System.Reflection.Metadata)已删除。
  3. 删除了packages文件夹中的所有延迟文件。
  4. 删除了包文件或.csproj文件中的任何延迟引用。
  5. 重新启动visual studio。
  6. 使用以下方法再次安装软件包:
  7. Install-Package Microsoft.CodeAnalysis -Version 1.3.2

    似乎已经安装了CodeAnalysis 1.3.1,尽管在解决方案浏览器中将其版本化为1.3.2。