【问题标题】:Type exists in 2 assemblies (due to Package dependency)类型存在于 2 个程序集中(由于包依赖)
【发布时间】:2020-03-16 20:48:07
【问题描述】:

我面临与Type exists in 2 assemblies 相同的问题:

中都存在该类型

我从问题中尝试了最多的voted answer,但是,我仍然收到错误
我相信这是因为我的设置与问题完全不同:我有两个项目ProjectAProjectB,每个项目都使用完全不同 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 中的UnrelatedPackage2PackageReference。这样做,您将阻止该包(及其依赖项)的引用在上游可见(ProjectBProjectC)。
  • @dymanoid 遗憾的是,<PrivateAssets>all</PrivateAssets> 没有任何效果。所有软件包在上游仍然可见,并且错误仍然存​​在。然而,这将我带到了一个 question 以完全不同的名称出现类似问题,它也被建议并且同样不起作用。幸运的是,另一个答案做到了。

标签: c# nuget


【解决方案1】:

有一个workaroundpackage itself 提供别名,但无法从UI 访问,编辑并添加以下TargetProjectC 的.csproj 文件:

<Target Name="ChangeAliasesOfAssemblies"
        BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
  <ItemGroup>
    <ReferencePath Condition="'%(FileName)' == 'Dependency.VendorB'">
      <Aliases>projectb</Aliases>
    </ReferencePath>
  </ItemGroup>
</Target>

其中Dependency.VendorB 是不带“Dependency (VendorB)”包扩展名的 .dll 文件名。清理/重建/重新启动 IDE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多