【问题标题】:The type 'MySqlConnection' exists in both 'MySql.Data Issue“MySqlConnection”类型存在于“MySql.Data 问题”中
【发布时间】:2018-02-08 10:28:40
【问题描述】:

我在一个项目中引用了MySql.Data,其他项目引用了nuget 包,其中也引用了MySqlConnector。项目有依赖关系。

当我编译应用程序时出现此错误

这是应用层次结构

有什么办法可以避免这种情况吗?还是我在引用包时做错了什么?

谢谢

更新 这是来自不同库的相同命名空间

更新 2

这是sample repo,转载了同样的问题

【问题讨论】:

  • 要么使用完全限定的类型名称,要么使用 cs 文件头部的 using 限定符来消除歧义。
  • @Matt 谢谢。问题是两者都有相同的命名空间请看我更新的帖子。
  • 那么编译器是如何知道使用哪一个的呢?
  • @ChrisL 好问题,这也是我的问题
  • 如果你用谷歌搜索“c# 类型存在于两个程序集中”——你会发现很多关于同一问题的问题。如果这些问题没有任何帮助 - 请包括您尝试的问题。

标签: c# asp.net-core dependencies nuget


【解决方案1】:

NET.Framework 项目中,您可以转到参考属性并为程序集设置别名。 Net core 项目尚不完全支持程序集的别名。但是有一种解决方法可以在.net core 中使用别名。像这样编辑您的 csproj 文件:

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

  <Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
    <ItemGroup>
      <ReferencePath Condition="'%(FileName)' == 'MySqlConnector'">
        <Aliases>MySqlConnectorAlias</Aliases>
      </ReferencePath>
    </ItemGroup>
  </Target>
...
</Project>

然后在所有使用之前在你的cs文件中:

extern alias MySqlConnectorAlias;

然后你可以像这样引用你从MySqlConnector 输入的内容:

MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection

【讨论】:

  • 嗨 Albertk,我想在我的代码中使用你的建议:MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection mysql = new MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection();然后得到错误Cannot resolve symbole MySql。 MySql.Data.MySqlClient 在我的情况下都是读取的。你能帮忙吗?谢谢
  • 很难确定。你在使用 Resharper 吗?如果是,请尝试遵循此处给出的答案:123
【解决方案2】:

如果您从您的项目/参考中删除 mysql.data 参考,它将起作用。

希望它对你有用。对我来说,它奏效了。我的项目是 ASP.NET Core Framework。在 VS2017 中创建项目并在 VS2019 中打开它。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2020-06-01
    • 2013-03-07
    • 2021-03-11
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多