【问题标题】:Overriding a NuGet solution's DLL's reference to a core library覆盖 NuGet 解决方案的 DLL 对核心库的引用
【发布时间】:2018-08-18 16:44:43
【问题描述】:

我正在开发一个 Windows C# .NET 4.5 程序,该程序利用多个 NuGet 项目来减少我需要编写的代码量(为什么要重新发明轮子?)。无论出于何种原因,这些 NuGet 项目之一具有覆盖我程序中其他地方使用的MSCORLIB 方法之一的依赖项。

ReSharper 警告我不明确的引用(而且我显然无法编译),而且我终其一生都无法弄清楚如何在此 NuGet 项目依赖项上指定使用 MSCORLIB 的方法。我花了几个小时在谷歌上搜索和阅读不同的东西,但找不到解决方案。

我的程序中存在歧义引用错误的部分以任何方式依赖 NuGet 包的依赖,所以如果我可以实现 MSCORLIB' s 方法在这个地方我会很成功。

这甚至可能吗?我尝试使用 ReSharper 的“使用此程序集...”将对 MSCORLIB 的引用显式添加到项目中,但选择其中任何一个都不起作用,以及 Visual Studio 中的“引用”选项卡。

【问题讨论】:

  • 另外,如果我能找到一种解决方法并且它破坏了这个 NuGet 包,我显然必须找到一个全新的解决方案。
  • 您是否尝试过在文件顶部使用:using NugetRef = NugetPackage.Namespace; 为 nuget 包引用设置别名以消除调用歧义?
  • 在这种情况下会起作用吗,因为它们引用了相同的命名空间?看到这张图片:i.imgur.com/rNHtmOg.png
  • 在那种情况下可能不是...您可以将其中一个动态加载到新的 AppDomain 中并删除静态引用。
  • 我没有这方面的经验(编辑:您所指的动态加载就是我所指的)。你有什么材料可以让我阅读一下,看看这是否是一个潜在的解决方案?

标签: c# .net dependencies .net-assembly


【解决方案1】:

您可以使用程序集别名和extern alias 解决此问题。要解决此问题,您需要手动编辑项目的 .csproj 文件。

如果您使用的是 packages.config,请在您的 .csproj 文件中查找与引入冲突类型的项目相对应的 <Reference> 元素,并为其分配别名。

<Reference Include="bouncy_castle_hmac_sha_pcl, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\BouncyCastle-PCL.1.0.0.6\lib\bouncy_castle_hmac_sha_pcl.dll</HintPath>
  <Aliases>bouncy_castle</Aliases>
</Reference>

如果您改用 PackageReference,则不会有直接的 &lt;Reference&gt; 元素,因此您需要添加一个目标来分配此值。

<Target Name="AssignAliasesToAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
  <ItemGroup>
    <ReferencePath Condition="'%(FileName)' == 'bouncy_castle_hmac_sha_pcl'">
      <Aliases>bouncy_castle</Aliases>
    </ReferencePath>
  </ItemGroup>
</Target>

然后,您可以重新加载您的项目。在您的 C# 中,将 extern alias bouncy_castle; 添加到文件顶部。这将指示编译器如何消除这两种类型之间的歧义。

extern alias bouncy_castle;
using System.Security.Cryptography;

namespace ClassLibrary2
{
    public class Class1
    {
        public HMACSHA1 Algorithm { get; }
        public bouncy_castle::System.Security.Cryptography.HMACSHA1 TheOtherOne { get; }
    }
}

顺便看看这个问题:https://github.com/NuGet/Home/issues/4989

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多