使用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的引用来自哪里,我如何让我的项目恢复工作秩序?
我很困惑,有很多原因:
- 为什么System.Reflection.Metadata是1.2.0.0。正在寻找而不是1.3?
- 为什么在预绑定信息中列出的Microsoft.CodeAnalysis.Csharp是1.3.1而不是1.3.2 ?
我已经卸载并重新安装了Microsoft.CodeAnalysis.CSharp及其依赖无数次,错误仍然存在。
我已经解决了这个问题
- 通过Nuget包管理器删除所有与该问题相关的包。
- 使用grep查找项目文件夹中相关包的所有实例(CodeAnalysis &System.Reflection.Metadata)删除。
- 删除packages文件夹中所有残留文件。
- 删除包文件或。csproj文件中任何残留的引用。
- 重新启动visual studio.
- 重新安装:
Install-Package Microsoft.CodeAnalysis -Version 1.3.2
似乎安装了CodeAnalysis 1.3.1,尽管在解决方案浏览器中它的nuget版本为1.3.2。