繁体   English   中英

覆盖NuGet解决方案的DLL对核心库的引用

[英]Overriding a NuGet solution's DLL's reference to a core library

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

ReSharper向我警告该引用含糊不清(而且我显然不能编译),而且我一生也无法弄清楚如何在此NuGet项目依赖项上指定使用MSCORLIB的方法。 我花了几个小时来搜寻和阅读不同的内容,但找不到解决方案。

我的程序中具有模棱两可的引用错误的部分以任何方式都不依赖于NuGet包的依赖关系,因此,如果我可以仅在这一点上实现MSCORLIB的方法,那我会很高兴。

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

您可以使用程序集别名和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,则不会有直接的<Reference>元素,因此,您需要添加一个目标来分配该值。

<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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM