类型 [Type] 存在于 [Assembly1] 和 [netstandard 2.0 assembly] 中

The type [Type] exists in both [Assembly1] and [netstandard 2.0 assembly]

我无法让 Microsoft.EntityFrameworkCore 2.0 与 NETStandard.Library 2.0

一起工作

Error CS0433 The type 'AttributeUsageAttribute' exists in both 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' Contrived.Model.Schema D:\Contrived\Contrived\Framework\Contrived.Model.Schema\Attributes\EntityColumnAttribute.cs

我的.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Update="NETStandard.Library" Version="2.0.0" />
  </ItemGroup>

</Project>

如果我创建一个新的解决方案和一个 netstandard 2.0 库,然后添加 entityframeworkcore 2.0,也会发生这种情况

Error CS1703 Multiple assemblies with equivalent identity have been imported: 'D:\Users\maksymiuk_a.nuget\packages\netstandard.library.0.0\build\netstandard2.0\ref\System.Threading.Tasks.dll' and 'D:\Users\maksymiuk_a.nuget\packages\system.threading.tasks.3.0\ref\netstandard1.3\System.Threading.Tasks.dll'. Remove one of the duplicate references. ClassLibrary1 D:\Contrived\Contrived\ClassLibrary1\ClassLibrary1\CSC

可能不是最好的主意,但尝试通过右键单击引用并在其中找到它来手动删除对 System.Runtime 的引用。

更新: Visual Studio 2017 15.3 and the 2.0.0 SDK 已发布。使用这些版本来消除此类冲突。

这似乎是在所有部分发布之前混合使用预览工具和 "RTM" 包时发生的构建问题之一。

要在撰写本文时获得对 2.0.0 的最佳支持,请执行以下操作之一:

此要求的原因是 2.0.0 SDK 知道这些冲突并从项目中删除冲突引用(System.*.dll 在这种情况下)。

即使使用 DOT NET Core 2+,此问题仍然会发生,这是因为您在项目中引用的包依赖于同一包的不同版本,特别是同一命名空间。

我知道有 2.5 个解决方案:

1) 如果您控制这两个包,则更新它们以确保它们使用相同版本的依赖项(或更改该依赖项版本之一的名称空间,如:Your.Thing.v3.Models

2) 如果您可以在 GitHub 等开源网站上找到其中一个或两个软件包,您可以下载它们并更新它们以使用该依赖项的相同版本(或来自上面的选项 1)

2.5) 如果您无法控制或无法访问这些包的源代码,并且我意识到这并不是真正的解决方案...(因此是 .5),那么最后一个选择是停止使用其中一个软件包。

如果有其他方法,我很想知道。

对我来说,删除对两个程序集的引用并重新添加它们很有效。

在解决方案资源管理器中展开项目的 References --> 右键单击​​错误的程序集 -> Remove.

然后右击References -> Add Reference... -> 勾选刚刚删除的程序集。

然后重建。

在我的例子中,我在 web.config 文件中添加了多个引用。 删除其中之一后,问题得到解决,并且在本地 IIS 服务器下也能正常工作