我有使用 BouncyCastle 的 ac# 程序。如果我插入对 iTextSharp 的引用,编译器会生成两个引用中已经存在的类的许多错误。我已经指定了所有的命名空间,但它并没有改变任何东西。例子:
Org.BouncyCastle.X509.X509Certificate certCopy = DotNetUtilities.FromX509Certificate(oCertificato);
如何同时使用 BouncyCastle 和 iTextSharp?
我有使用 BouncyCastle 的 ac# 程序。如果我插入对 iTextSharp 的引用,编译器会生成两个引用中已经存在的类的许多错误。我已经指定了所有的命名空间,但它并没有改变任何东西。例子:
Org.BouncyCastle.X509.X509Certificate certCopy = DotNetUtilities.FromX509Certificate(oCertificato);
如何同时使用 BouncyCastle 和 iTextSharp?
TL;DR:使用 PackageReference 的Aliases
属性*.csproj
并将别名添加到受影响的*.cs
文件:
<PackageReference Include="PackageAffectedByConflict" Aliases="AltGlobalNamespace" />
extern alias AltGlobalNamespace;
using AltGlobalNamespace.ConflictedName;
根据微软的 NuGet 文档:
在极少数情况下,不同的包将包含同一命名空间中的类。从 NuGet 5.7 和 Visual Studio 2019 Update 7 开始,相当于 ProjectReference,PackageReference 支持别名。默认情况下不提供别名。指定别名时,来自带注释的包的所有程序集都需要使用别名引用。
该文档还链接了GitHub 上的示例,展示了如何使用该Aliases
属性:
PackageReferenceAliasesExample.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NuGet.Versioning" Version="5.8.0" Aliases="ExampleAlias" />
</ItemGroup>
</Project>
Program.cs
:
extern alias ExampleAlias;
using System;
namespace PackageReferenceAliasesExample
{
class Program
{
static void Main(string[] args)
{
var version = ExampleAlias.NuGet.Versioning.NuGetVersion.Parse("5.0.0");
Console.WriteLine($"Version : {version}");
}
}
}