我正在使用Visual Studio 2010
Crystal Report
。它在我的本地服务器上工作正常,但在Web服务器上,它给出错误:
System.Runtime.InteropServices.COMException: Invalid file name
。
我尝试了许多解决方案,例如将.rpt
文件放在任何文件夹中并提供该路径,给予windows temp文件夹完全权限,启用父路径表单IIS等。
但他们都没有工作。请帮我解决这个问题。
我当前的路径:
crystalReport.Load(Server.MapPath("~/PurchaseOrder1.rpt"));
答案 0 :(得分:2)
不是一个完整的答案,但我太新了,只是评论。您可以尝试的一件事是下载Process Monitor并观察Crystal尝试加载文件的位置,这可能有所帮助。 Process Monitor将提供大量输出,但可以对其进行过滤,例如,文件名的一部分。它可能会告诉您是否存在权限问题。我觉得这对于你无法解决为什么找不到文件的情况非常有用。
答案 1 :(得分:0)
我的猜测是罪魁祸首可能是Web服务器路径上的尾随/
。
尝试使用Path.Combine(Server.MapPath("~"), "PurchaseOrder1.rpt");
这应该在路径中放置适当的/
,并可能解决您的问题。
答案 2 :(得分:0)
我认为与本地和服务器环境的主要区别在于IIS根目录和应用程序所在的虚拟目录。
我的意思是,如果文件位于网站的根目录中,您可能需要使用
crystalReport.Load(Server.MapPath("/PurchaseOrder1.rpt"));
或者您可以尝试将rpt文件放入ViewPurchaseOrder.aspx
的同一文件夹中而不更改代码
如果它不起作用,如果你可以共享路径(物理和虚拟),我们可以进一步检查。
*编辑:使用Server.MapPath
时 /
返回网站根目录
~/
返回应用程序的根目录
不同之处在于,如果您的网站是:
http://yoursite.com
并且您有wwwroot\somedir\app
所以在你的" app" (http://yoursite.com/somedir/app)
/应该返回网站的根目录(http://yoursite.com)
〜/应该返回应用程序的根目录(http://yoursite.com/somedir/)