【问题标题】:Visual Studio: [CS0433] type Func<T, TResult> exists in both <System.Core (3.5.0.0)> and <mscorlib (4.0.0.0)>Visual Studio:[CS0433] 类型 Func<T, TResult> 存在于 <System.Core (3.5.0.0)> 和 <mscorlib (4.0.0.0)> 中
【发布时间】:2019-02-01 05:36:27
【问题描述】:

我最近在使用 Visual Studio 时遇到了很多困难,但我就是无法解决这个问题。在尝试重建我的项目时,我得到:

错误 CS0433:“System.Core,版本=3.5.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”和“mscorlib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中都存在“Func”类型'

似乎唯一可行的方法是手动添加对 csproj 文件的引用。

<Reference Include="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>

这给我留下了一个新错误:

错误 CS1703:已导入具有相同标识的多个程序集:'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' 和 'C:\WINDOWS\Microsoft .Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'。删除重复引用之一。

现在项目中找不到 3.5.0.0 引用,但可以在对象浏览器中看到,但没有删除它的选项:

在 app.config 文件中,我还尝试将引用重定向到较新的版本:

<dependentAssembly>
    <assemblyIdentity name="System.Core" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="3.5.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

这不会改变任何事情。

我很感激任何想法或意见,因为我已经搜索并为此苦苦挣扎了一个多星期。

【问题讨论】:

  • 如果您只是尝试使用较新的版本而不是重定向怎么办?似乎在 3.5 和 4.0 之间将它从一个移到另一个。
  • 另外,检查您的目标平台。看起来你想在 3.5 上构建一些 4.0 的东西
  • 这些不仅仅是任何程序集。它们是 runtime 文件。不知何故,您的代码在某处引用了为 .NET 3.5 运行时构建的程序集。您应该用更新的版本替换它们 - .NET 4.0 于 2010 年问世。很可能该程序集的作者发布了更新版本,或者完全放弃了它
  • 您是否使用过时的 Windows 工作流或 WPF 程序集?您是否使用旧的第三方库连接到远程服务? .NET 3.5 是添加了 WF、WPF 和 WCF 的 .NET 2.0 运行时。所有这些都在 .NET 4.0 及更高版本中升级,因此您应该能够找到更新的库
  • @John 我该怎么做?

标签: c# .net visual-studio


【解决方案1】:

解决这个问题真是太痛苦了。经过几个小时的努力,我终于发现了 system.core.dll 的“3.5”版本的问题。 因此,我将 "4.0.." 版本的“system.core.dll”从 Program Files (X86) 文件夹复制到了应用程序的 References 或 Bin 文件夹。对我来说,它位于(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5)下。 此外,如果需要,请手动添加对原始问题中提到的 csproj 文件的引用。 希望能帮助到你。叹息:)

【讨论】:

  • 感谢您的回答,但如果我没记错的话,那也无济于事。我最终通过清除 GAC(全局程序集缓存)中的条目来修复它。
【解决方案2】:

打开 Windows 控制面板 > 程序和功能 > 打开或关闭 Windows 功能,并禁用 .Net Framework 3.5。 video

这种方式适合我。

【讨论】:

    【解决方案3】:

    两种方式。 1. 使用“使用 xxx=.....” 2.写一个类包装器来避免引用。

    【讨论】:

    • 这些有什么帮助?类包装器不会避免引用,它会添加另一个
    【解决方案4】:

    您可以定义自己的委托:

    public delegate T MyFunc<T1, T>(T1 item); public delegate T MyFunc<T1, T2, T>(T1 item1, T2 item2); ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多