【问题标题】:ASP.NET application using the wrong file path when publishing to a windows server 2008 machineASP.NET 应用程序在发布到 Windows Server 2008 机器时使用了错误的文件路径
【发布时间】:2011-06-08 17:43:45
【问题描述】:

我有一个我正在修改的 asp.net 应用程序。我将 Visual Studio 2010 设置为发布到正在运行 Windows Server 2008 RC 2 的开发服务器(不认为这很重要)。我通过视觉工作室的“添加新项目”功能向应用程序添加了一个新的网络表单,它可以在我的本地计算机上运行。当我发布到服务器时,它开始抛出加密异常,因为它试图访问 .p12 文件以便将苹果推送通知发送到 iphone 设备。起初我认为证书有问题,所以我在代码中添加了打印语句,并注意到它试图访问我本地机器上的文件路径而不是服务器上的文件路径的新页面。有没有人对它为什么这样做有任何想法?有没有办法让文件路径相对于项目?

【问题讨论】:

    标签: c# asp.net visual-studio-2010 windows-server-2008-r2


    【解决方案1】:

    您必须使用 MapPath("{relativePath/FileName}") 。这将返回一个物理路径。

    filename = MapPath("/images/logo.jpg")
    

    类似“C:\inetpub\webroot\images\logo.jpg”的内容

    【讨论】:

    • 证书的文件路径没问题。实际网页的文件路径错误。我让它打印异常的堆栈跟踪,它说问题出在 C:\Users\myusername\Desktop\myapp\newpage.aspx 行:71 应该说 C:\inetpub\wwwroot\newpage.aspx 行: 71
    • 实际上堆栈跟踪是正确的,因为它显示了编译时文件的路径,因为此信息存储在构建期间生成的 .pdb 文件中。所以它实际上是从服务器上的 c:\inetpub\wwwroot\newpage.aspx 运行的,但堆栈跟踪会显示文件编译时的位置。
    • 哦,好的。您对为什么它在服务器上出现加密错误但在我的本地机器上没有其他想法?
    【解决方案2】:

    服务器无关紧要。该文件添加了绝对路径。不知道为什么,也没有时间研究。

    站点是如何在您的调试机器上设置的?您使用的是 IIS 还是 ASP.NET 开发服务器?不确定这是否重要,但切换到 IIS 并更好地模拟生产通常可以解决这些小错误类型的错误。要切换,请将文件夹添加到 IIS,然后删除项目并使用 HTTP 路径而不是项目文件夹重新包含。

    如果本地 IIS 不是一个选项,或者您已经这样做了,我会搜索有问题的路径并在那里进行更改。如果您没有找到结果,我们可以通过某种方式将其嵌入到解决方案文件中。

    【讨论】:

    • 在我的本地机器上,它被设置为使用 asp.net 开发服务器。我会尝试将其切换到 iis。
    • 当您试图找出本地和生产之间的差异时,它肯定会有所帮助。
    • 同样的问题。它适用于我的机器,但不适用于服务器。我认为它确实与证书有关..我不确定是什么,因为它可以在我的机器上运行...
    • @MBU:你也在使用 ASP.NET 开发服务器吗?而且,您是否检查过路径是隐式(通过工具)还是显式(您以某种方式完成的)“硬编码”?两者都是正确的故障排除步骤。
    • 发现问题不在于路径。它与证书有关。当我在 asp.net 开发服务器下运行时,一切正常。但是当我切换到 iis 时,它不会给出加密异常错误。在 iis 下运行时读取证书的方式是否存在差异?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2011-12-12
    • 2011-06-17
    • 1970-01-01
    • 2011-07-03
    • 2013-11-12
    相关资源
    最近更新 更多