【发布时间】:2020-03-16 20:48:07
【问题描述】:
我面临与Type exists in 2 assemblies 相同的问题:
和 中都存在该类型
我从问题中尝试了最多的voted answer,但是,我仍然收到错误。
我相信这是因为我的设置与问题完全不同:我有两个项目ProjectA 和ProjectB,每个项目都使用完全不同 NuGet 包,碰巧使用依赖项/名称完全相同但来自不同供应商的类型(没有供应商前缀!)。这两个项目都在ProjectC中引用
ProjectA
- Packages
-- UnrelatedPackage1
--- Dependency (VendorA)
ProjectB
- Packages
-- UnrelatedPackage2
--- Dependency (VendorB)
ProjectC
- Refences
-- ProjectA
-- ProjectB
现在,我想在ProjectC 的代码中捕获ProjectA 的依赖项中引发的异常:
try {
ProjectA.SomeClass.DoStuff();
}
catch (ExceptionFromDependency ex)
{ }
但我不能,因为
类型ExceptionFromDependency都存在于
和
按照the answer 中的建议,我在ProejctC 中的ProjectB 引用中添加了别名projectb,但它没有修复错误-可能是因为源不是项目本身,而是依赖于依赖。
如何修复错误以便捕获异常?我从不打算使用“依赖项(VendorB)”中的任何类型,如果提供更简单的解决方案,我更愿意将其存在包含在ProjectB 中。
【问题讨论】:
-
添加一点元信息:不同包使用的相关依赖是MySql适配器,有问题的异常是MySql.Data.MySqlClient.MySqlException,但问题是关于这个依赖问题一般。
-
您可以尝试将
<PrivateAssets>all</PrivateAssets>设置为ProjectB中的UnrelatedPackage2的PackageReference。这样做,您将阻止该包(及其依赖项)的引用在上游可见(ProjectB和ProjectC)。 -
@dymanoid 遗憾的是,
<PrivateAssets>all</PrivateAssets>没有任何效果。所有软件包在上游仍然可见,并且错误仍然存在。然而,这将我带到了一个 question 以完全不同的名称出现类似问题,它也被建议并且同样不起作用。幸运的是,另一个答案做到了。