在apphorbor上托管的MVC解决方案遇到了一个奇怪的问题。在本地它运行得很好,但我得到一个异常抛出给我时,在生产(外观)。
堆栈跟踪代码:
string keyFilePath = HttpContext.Current.Server.MapPath("~/key.p12");
string serviceAccountEmail = "my-email-here@developer.gserviceaccount.com";
var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { "https://spreadsheets.google.com/feeds/" }
}.FromCertificate(certificate));
进一步跳到这个问题,问题来自我的代码的第一行:
string keyFilePath = HttpContext.Current.Server.MapPath("~/key.p12");
检查构建后,似乎我的钥匙。P12甚至不在服务器上(甚至在推送之后)。apphor是否拒绝某些文件?
apphor不拒绝某些文件,但MsBuild配置为使用显式输出目录。这可能与您的本地环境不同,在本地环境中,解决方案通常构建在同一目录中。默认情况下,apphor使用的MsBuild目标不会复制某些文件,除非您显式地配置它。
这个问题可以通过在项目中引用证书文件,然后将"Build Action"属性设置为"Content"来修复。这将导致文件被复制到输出目录。
另一种解决方案是将证书作为嵌入式资源嵌入,这里初始化一个嵌入式证书并将其安装在用户的证书存储库中。请注意,通常不需要安装证书就可以使用它。