无法加载文件或程序集“System.Runtime.CompilerServices.Unsafe”

10

尝试在使用postgres时使用SQLTypeProvider时,运行时会出现以下错误

dotnet build

错误 FS3033: 数据类型提供程序'FSharp.Data.Sql.SqlTypeProvider'报告了一个错误: 无法加载文件或程序集'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。系统找不到指定的文件。[/home/sashan/code/titan/src/Server/Server.fsproj]

我的数据提供者是这个:

type SQL = SqlDataProvider< 
                  ConnectionString = pg_dev_conn_string,
                  DatabaseVendor = Common.DatabaseProviderTypes.POSTGRESQL,
                  UseOptionTypes = true >
如果我将它更改为以下内容
type SQL = SqlDataProvider< 
              ConnectionString = pg_dev_conn_string,
              DatabaseVendor = Common.DatabaseProviderTypes.POSTGRESQL,
              ResolutionPath = "/home/sashan/code/dotnet/2.1.500/sdk/NuGetFallbackFolder/system.runtime.compilerservices.unsafe/4.5.1/lib/netcoreapp2.0",
              UseOptionTypes = true >
错误已经消失,但我不知道为什么。修复方法似乎非常奇怪。为什么我必须将其指向项目外的文件?难道 System.Runtime.CompilerServices.Unsafe.dll 不应该在项目的子目录中的某个位置,以便编译器可以找到它吗?

1
你解决过这个问题吗?我今天遇到了。我正在使用macOS。谢谢。 - boggy
4个回答

7
我使用Unity容器时遇到了同样的问题,在从Nuget更新了这个dll之后,我的问题得到了解决。

5
我通过注释Web.config中包含System.Runtime.CompilerServices.Unsafe的条目来解决该问题。

3

请在命令提示符中尝试执行以下操作:

您可以在(C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools>)找到gacutil,其他已安装的框架在bin文件夹中,请根据需要为其他“..\bin\NETFX x.x Tools”框架运行相同的命令。

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools>

gacutil -i "C:\Program Files\dotnet\sdk\3.1.401\Sdks\Microsoft.NET.Sdk.WindowsDesktop\tools\net472\System.Runtime.CompilerServices.Unsafe.dll"


1
它对我不起作用,所以最后我使用 NuGet 包管理器卸载了有问题的项目并重新安装它们。 - Jonathan Rosenne

0

我不知道这个问题的确切原因(以及其他类似的问题,例如无法加载文件或程序集'System.Runtime.CompilerServices.Unsafe'...但在我的情况下,解决方案是:

  • 重新安装System.Runtime.CompilerServices.Unsafe,并从所有依赖包开始。

请确保您记下依赖树(NuGet软件包名称和版本),您可能需要这些信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接