【问题标题】:BouncyCastle in conflict with iTextSharpBouncyCastle 与 iTextSharp 冲突
【发布时间】:2019-01-04 18:40:00
【问题描述】:

我有一个使用 BouncyCastle 的 c# 程序。如果我插入对 iTextSharp 的引用,编译器会生成两个引用中已经存在的类的许多错误。我已经指定了所有的命名空间,但它并没有改变任何东西。 示例:

 Org.BouncyCastle.X509.X509Certificate certCopy = DotNetUtilities.FromX509Certificate(oCertificato);

如何同时使用 BouncyCastle 和 iTextSharp?

【问题讨论】:

  • 你应该阅读this SO question并看看this GitHub source
  • 我通过仅更改 iTextSharp dll 属性中的别名来解决。谢谢!
  • 欢迎来到 Stackoverflow!您是否知道如果您自己找到了解决方案,您可以回答自己的问题?这也将帮助其他人......
  • 对于其他任何人:如果您将 iTextSharp 的引用属性中的别名从“global”更改为“iText”,那么您的 using 语句将是 extern alias iText;using iText::iTextSharp.text.pdf;
  • 如果您在添加 alias 时遇到问题,您可能需要手动编辑 csproj。更多详情见stackoverflow.com/a/55986973/426315

标签: c# itext bouncycastle


【解决方案1】:

就像@franco-de-giorgi 所说的那样。向库中添加别名。

我只是在写一个完整的答案,因为我必须了解什么是别名以及如何添加和别名

转到您的参考资料并转到 BouncyCastle 上的属性,然后将全局更改为您的个人别名:

然后在你的类中使用外部别名来引用你的引用,像这样(而不是使用)

//using Org.BouncyCastle.Crypto.Parameters;
extern alias Merged;

在您的课程中添加您的别名

new Merged::Org.BouncyCastle.OpenSsl.PemReader

【讨论】:

    【解决方案2】:

    TL;DR:在 *.csproj 中使用 PackageReference 的 Aliases 属性并将别名添加到受影响的 *.cs 文件中:

    <PackageReference Include="PackageAffectedByConflict" Aliases="AltGlobalNamespace" />
    
    extern alias AltGlobalNamespace;
    
    using AltGlobalNamespace.ConflictedName;
    

    根据NuGet documentation from Microsoft

    在极少数情况下,不同的包将包含同一命名空间中的类。 从 NuGet 5.7 和 Visual Studio 2019 Update 7 开始,相当于 ProjectReference,PackageReference 支持别名。默认情况下不提供别名。指定别名时,来自带注释包的所有程序集都需要使用别名引用。

    该文档还链接了一个example on 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}");
            }
        }
    }
    

    【讨论】:

    • 我保持示例通用,因此使用 BouncyCastle 作为 PackageAffectedByConflict,并为 AltGlobalNamespace 选择任何名称(包括 BouncyCastle)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2017-12-09
    • 2013-10-21
    • 2020-08-19
    相关资源
    最近更新 更多