两个DLL中都存在该类型

11

我想同时使用Accord库和AForge库的一些内容。但是当我安装它时,我开始遇到以下错误:

Error CS0433
The type 'IntPoint' exists in both
    'AForge, Version=2.2.5.0, Culture=neutral, PublicKeyToken=c1db6ff4eaa06aeb' and
    'Accord, Version=3.0.2.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7'

在这行代码上:

startingPoint = new IntPoint(point.X, point.Y);

我该如何确保只使用原始的AForge DLL?也许有什么变通方法吗?

我尝试过

AForge.IntPoint

但事实证明,Accord使用相同的命名空间...!


1
看起来 Accord.Net 复制了 AForge 的源代码,而不是使用引用。这样做有些草率。所以你需要从你的项目中移除 AForge 的引用,应该比与 extern alias 战斗要简单。 - Hans Passant
@HansPassant 很不幸,我需要来自 AForge.Imaging 的东西,它依赖于 AForge。一旦我删除对 AForge 的引用,它仍然告诉我需要添加对 AForge 的引用。 - Mateen Ulhaq
只是澄清一下:Accord.NET并不是粗心地复制AForge.NET的源代码,而是有效地替换了AForge.NET,因为AForge.NET已经被停止维护了。 有一段时间,Accord.NET提供了与AForge相同名称空间的相同���容,因此它可以作为现有项目的即插即用替代品。 - Cesar
3个回答

15

打开项目的 References,右键点击有问题的引用,选择“属性”。

输入图像描述

将别名更改为自定义名称:

输入图像描述

然后每当您想在代码中使用该引用时,只需在文件顶部插入此内容:

extern alias MyAlias;

1
所有来自 AForge.Imaging 的代码已经完全包含在 Accord 3.0 中的 Accord.Imaging 中,因此您无需引用 AForge.Imaging - Anders Gustafsson

0
我通过勾选“发布前删除所有现有文件”来解决了这个问题。 enter image description here


0
这是对我有效的方法:
1- 删除错误信息中提到的引用。(即使它显示的是正确的版本,也要删除它)。

enter image description here

2- 从 packages.config 中删除相关行
<package id="Microsoft.Owin.Security.Cookies" version="4.2.2" targetFramework="net48" />

3- 从Nuget重新安装该包或引用其dll。
4- 确保在web.config中将旧版本映射到新版本。
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.2.0" newVersion="4.2.2.0" />
  </dependentAssembly>

在那里是正确的,但有时候它会有帮助。

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