[英]Nuget Library - Copy DLL of Library to current project's output directory
[英]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.