2016-11-03 8 views
0

Может кто-нибудь сказать мне, почему сайт .NetCore MVC, который работает отлично локально не запускается на Azure, если я вызываю эту функцию при запуске:Что случилось с отражением. NetCore на Azure?

private static X509Certificate2 GetCertificate(string password) 
     { 
      var assembly = Assembly.GetEntryAssembly(); 
      var resourceStream = assembly.GetManifestResourceStream("namespace.path.to.certificate.cert.pfx"); 

      byte[] data; 

      using (resourceStream) 
      { 
       data = resourceStream.ReadFully(); 

      } 

      var cert = new X509Certificate2(data, password); 
      return cert; 
     } 

Если удалить этот вызов, сайт начинает нормально, если не я получите ошибку 502.

Обратите внимание, что эта функция отлично работает на локальных IIS и IISExpress.

ответ

0

Название ресурса должно быть: <Base namespace>.<RelativePathInProject>.<FileName>. Кроме того, ресурс должен быть Embedded Resource

Так что, если ваш ресурс находится в "Ресурсы/Certs /", и ваше пространство имен проекта по умолчанию "MyProject.Test", имя ресурса: "MyProject.Test.Resources.Certs.Certificate.cert.pfx"

Но может быть и другая проблема - дополнительная точка в имени файла. Если вы пытаетесь загрузить ресурсы, которые были скомпилированы в вашу сборку в виде встроенных ресурсов, похоже, вы не можете использовать дополнительные «точки» в своем соглашении об именах, иначе компиляторы не будут правильно добавлять ваш файл в манифест, и в этот момент все вызовы GetManifestResourceStream возвращают значение null. Как я вижу, у вас есть pathtocertificate.cert.pfx. Попробуйте иметь только certificate.pfx.

+0

Код отлично работает на моей локальной машине. Поток ресурсов найден, и сертификат работает после загрузки. Только на Azure этот код вызывает ошибку. – Richard