'Npgsql.TypeMapping.GlobalTypeMapper' 的类型初始值设定项抛出异常

The type initializer for 'Npgsql.TypeMapping.GlobalTypeMapper' threw an exception

使用 Visual Studio 2017 尝试使用服务器资源管理器添加到 Postgres 数据库的连接。单击测试连接。问题显示错误:'Npgsql.TypeMapping.GlobalTypeMapper' 的类型初始值设定项引发异常。

在此之前,我安装了 System.Runtime.CompilerServices.Unsafe v4.5.2 和 System.Numerics.Vectors v4.4.0 以修复错误消息 "Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1" 和无法加载文件或程序集 'System.Numerics.Vectors,版本=4.1.3.0.

我不知道如何解决这个问题"The type initializer for 'Npgsql.TypeMapping.GlobalTypeMapper' threw an exception."

我只想将 PostgreSQL 数据库的连接添加到 Visual Studio 2017。我已经在 postgres 中有一个数据库...我不知道我要先安装什么来添加该连接.

在Visual Studio=>工具=>扩展和更新中安装 Npgsql PostgresSQL 集成后,我创建了新项目并直接进入管理 Nuget 包并安装了 System.Runtime.CompilerServices.Unsafe v4.5.2 和 System.Numerics.Vectors v4.4.0。 我直接尝试在服务器资源管理器中添加连接。 我对此一无所知。我只是想在 visual studio 中添加 postgres 的数据连接,以便我可以添加 ADO.NET 实体数据模型。

更多技术细节 .NET 框架 4.6.1 Npgsql 版本 4.1.1.2

这是我找到的一个潜在修复方法。很难确切地理解这是做什么的,但它确实有效!您可以将其添加到根目录中的 csproj 文件中。通过 here 找到这个。这似乎是一种黑客攻击。不知道有没有解决问题的根源。

<Target Name="ReplaceRefWithLib" BeforeTargets="ResolveAssemblyReferences">
    <ItemGroup>
      <_noCopyRefs Include="@(Reference)" Condition="'%(Reference.Private)' == 'false'" />
      <_noCopyRefsByFileName Include="@(_noCopyRefs->'%(FileName)')">
        <OriginalItem>%(Identity)</OriginalItem>
      </_noCopyRefsByFileName>

      <_libByFileName Include="@(ReferenceCopyLocalPaths->'%(FileName)')">
        <OriginalItem>%(Identity)</OriginalItem>
      </_libByFileName>

      <_overlappingRefByFileName Include="@(_noCopyRefsByFileName)" Condition="'@(_noCopyRefsByFileName)' == '@(_libByFileName)' AND '%(Identity)' != ''" />
      <_overlappingLibByFileName Include="@(_libByFileName)" Condition="'@(_noCopyRefsByFileName)' == '@(_libByFileName)' AND '%(Identity)' != ''" />

      <_overlappingRef Include="@(_overlappingRefByFileName->'%(OriginalItem)')" />
      <_overlappingLib Include="@(_overlappingLibByFileName->'%(OriginalItem)')" />
    </ItemGroup>

    <ItemGroup Condition="'@(_overlappingRef)' != ''">
      <Reference Remove="@(_overlappingRef)" />
      <Reference Include="@(_overlappingLib)">
        <Private>false</Private>
      </Reference>
    </ItemGroup>
  </Target>

  <Target Name="RemoveNetFxForceConflicts" AfterTargets="ResolveAssemblyReferences">
    <ItemGroup>
      <ReferencePath Remove="@(ReferencePath)" Condition="'%(FileName)' == 'netfx.force.conflicts'" />
    </ItemGroup>
  </Target>

对于Npgsql 4.1.x版本有此类问题的,只需升级到最新版本4.1.11