任何人都可以告诉我为什么如果我在启动时调用此函数,本地工作正常的.NetCore 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上运行良好。
答案 0 :(得分:0)
资源的名称应为:<Base namespace>.<RelativePathInProject>.<FileName>
。此外,资源必须是嵌入式资源
因此,如果您的资源位于&#34; Resources / Certs /&#34;,并且您的默认项目名称空间为&#34; MyProject.Test&#34;,则资源名称为:"MyProject.Test.Resources.Certs.Certificate.cert.pfx"
但可能存在其他问题 - 文件名中的额外点缀。
如果您尝试将编译到程序集中的资源作为嵌入式资源加载,则看起来您不能在命名约定中使用额外的“点”,否则编译器将无法正确地将您的文件添加到清单中,此时所有对GetManifestResourceStream的调用将返回null。
我可以看到你有pathtocertificate.cert.pfx
。尽量只拥有certificate.pfx
。