gpt4 book ai didi

c# - 使用 Roslyn 编译程序集时出现 FileNotFoundException

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:47 32 4
gpt4 key购买 nike

我正在尝试在运行时使用 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 在预绑定(bind)信息中列在 1.3.1 而不是 1.3.2?

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

如有任何帮助,我们将不胜感激。

最佳答案

我已经解决了这个问题。

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

Install-Package Microsoft.CodeAnalysis -Version 1.3.2

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

关于c# - 使用 Roslyn 编译程序集时出现 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921589/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com