Как решить ошибку «Не удается неявно преобразовать», если две сборки имеют одинаковое пространство имен? - PullRequest
0 голосов
/ 31 января 2019

Я создаю сертификат сертификата, но я испытываю что-то вроде конфликта пространства имен сборки между BouncyCastle и ITextSharp-LGPL-4.1.6.

Поэтому я попытался добавить псевдоним в библиотеку BouncyCastle, которую я используюи попробовал явное преобразование, но ничего не получилось.

return (BouncyCastleCrypto::Org.BouncyCastle.X509.X509Certificate)cert.Generate(pair.Private);

И в результате я получаю сообщение об ошибке:

CS0029 Cannot implicitly convert type 'Org.BouncyCastle.X509.X509Certificate [C:\XXX\packages\BouncyCastle.1.8.4\lib\BouncyCastle.Crypto.dll]' to 'Org.BouncyCastle.X509.X509Certificate [C:\XXX\packages\iTextSharp-LGPL.4.1.6\lib\iTextSharp.dll]' Project C:\xxx\src\MyCode.cs

Понятия не имею, что делатьделайте сейчас, у меня нет вариантов.

EDIT1:

Вопрос не в доступе к самому типу, а в вызове метода этого типа.

У меня есть эта часть кода:

BouncyCastleCrypto::Org.BouncyCastle.X509.X509V3CertificateGenerator cert = new BouncyCastleCrypto::Org.BouncyCastle.X509.X509V3CertificateGenerator();

А затем у меня есть эта часть кода:

return cert.Generate(pair.Private);

, которая дает мне ошибку.Как я должен уточнить, какую сборку я использую, когда это просто вызов метода?

EDIT2:

Хорошо, поэтому я вставляю весь файл сюда:

extern alias BouncyCastleCrypto;
using BouncyCastleCrypto.Org.BouncyCastle.Crypto.Operators;
using BouncyCastleCrypto.Org.BouncyCastle.Asn1.Pkcs;
using BouncyCastleCrypto.Org.BouncyCastle.Asn1.X509;
using BouncyCastleCrypto.Org.BouncyCastle.Crypto;
using BouncyCastleCrypto.Org.BouncyCastle.Crypto.Generators;
using BouncyCastleCrypto.Org.BouncyCastle.Crypto.Prng;
using BouncyCastleCrypto.Org.BouncyCastle.OpenSsl;
using BouncyCastleCrypto.Org.BouncyCastle.Pkcs;
using BouncyCastleCrypto.Org.BouncyCastle.Security;
using XXXX.ViewModels;
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using BouncyCastleCrypto.Org.BouncyCastle.X509;
using BouncyCastleCrypto.Org.BouncyCastle.Math;

namespace XXXX.Helpers
{
  public static class PKIHelper
  {


public static Org.BouncyCastle.X509.X509Certificate GenCert(CertInfo info)
{
  RsaKeyPairGenerator _rsa = new RsaKeyPairGenerator();
  SecureRandom _random = new SecureRandom();

  _rsa.Init(new KeyGenerationParameters(_random, info.rsa_strength));
  AsymmetricCipherKeyPair _pair = _rsa.GenerateKeyPair();

  X509Name _cert_name = new X509Name("CN=" + info.name);
  BigInteger _serialnumber = BigInteger.ProbablePrime(120, new Random());

  BouncyCastleCrypto::Org.BouncyCastle.X509.X509V3CertificateGenerator _cert = new BouncyCastleCrypto::Org.BouncyCastle.X509.X509V3CertificateGenerator();
  _cert.SetSerialNumber(_serialnumber);
  _cert.SetSubjectDN(_cert_name);
  _cert.SetIssuerDN(_cert_name);
  _cert.SetNotBefore(info.begin_date);
  _cert.SetNotAfter(info.expire_date);
  _cert.SetSignatureAlgorithm("SHA1withRSA");
  _cert.SetPublicKey(_pair.Public);

  _cert.AddExtension(X509Extensions.ExtendedKeyUsage.Id, false,
      new AuthorityKeyIdentifier(
          SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(_pair.Public),
          new GeneralNames(new GeneralName(_cert_name)), _serialnumber));
  _cert.AddExtension(X509Extensions.ExtendedKeyUsage.Id, false,
      new ExtendedKeyUsage(new[] { KeyPurposeID.IdKPServerAuth }));


  return _cert.Generate(_pair.Private); // here's error
}

  }
}

1 Ответ

0 голосов
/ 01 февраля 2019

Хорошо, дело в том, что я был почти уверен, что использовал правильный тип в качестве возвращаемого типа метода GeneratePKI, который был Org.BouncyCastle.X509.X509Certificate, но на самом деле Org.BouncyCastle.X509.X509Certificate был из библиотеки iTextSharp, ипоэтому компилятор решил, что он должен скрытно скрыть это.Когда я добавил псевдоним перед возвращаемым методом типа BouncyCastleCrypto::Org.BouncyCastle.X509.X509Certificate, все волшебным образом снова начало компилироваться.Спасибо @devNull, что не бросил меня.

...