使用Roslyn编译汇编时出现FileNotFoundException

本文关键字:FileNotFoundException 汇编 Roslyn 编译 使用 | 更新日期: 2023-09-27 18:12:15

我试图在运行时使用Roslyn编译。cs文件。我认为我在配置所需的nuget包时出现了一些错误。

  • 我有一个名为"ReadAndCompileSource"的方法,它读取。cs文件并使用csharpcompile . 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 ?

我已经卸载并重新安装了Microsoft.CodeAnalysis.CSharp及其依赖无数次,错误仍然存在。

使用Roslyn编译汇编时出现FileNotFoundException

我已经解决了这个问题

  1. 通过Nuget包管理器删除所有与该问题相关的包。
  2. 使用grep查找项目文件夹中相关包的所有实例(CodeAnalysis &System.Reflection.Metadata)删除。
  3. 删除packages文件夹中所有残留文件。
  4. 删除包文件或。csproj文件中任何残留的引用。
  5. 重新启动visual studio.
  6. 重新安装:

Install-Package Microsoft.CodeAnalysis -Version 1.3.2

似乎安装了CodeAnalysis 1.3.1,尽管在解决方案浏览器中它的nuget版本为1.3.2。

相关文章:
  • 没有找到相关文章