Azure上的.NetCore反射有什么问题

本文关键字:什么 问题 反射 上的 NetCore Azure | 更新日期: 2023-09-27 18:16:10

如果我在启动过程中调用以下函数,有人能告诉我为什么一个在本地运行良好的.Net Core MVC站点无法在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上运行良好

Azure上的.NetCore反射有什么问题

资源的名称应该是:<Base namespace>.<RelativePathInProject>.<FileName>。此外,资源必须是嵌入式资源

因此,如果您的资源位于"Resources/Certs/"中,并且您的默认项目命名空间为"MyProject.Test",则资源名称为:"MyProject.Test.Resources.Certs.Certificate.cert.pfx"

但可能还有其他问题——文件名中有额外的点。如果您试图将编译到程序集中的资源加载为嵌入式资源,则在命名约定中似乎无法使用额外的"点",或者编译器无法将文件正确添加到清单中,此时对GetManifestResourceStream的所有调用都将返回null。正如我所看到的,你有pathtocertificate.cert.pfx。尽量只有certificate.pfx