C# 在crystal reports中设置相对路径

C# 在crystal reports中设置相对路径,c#,crystal-reports,C#,Crystal Reports,我已经编写了以下代码 CrystalDecisions.CrystalReports.Engine.ReportDocument report = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); report.Load(@"C:\Users\XXX\Desktop\Backup1\Project\ReportsFolder\ReportSalesInvoice.rpt"); 对于上面的代码,Report可以正常工作,但我

我已经编写了以下代码

CrystalDecisions.CrystalReports.Engine.ReportDocument report = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
report.Load(@"C:\Users\XXX\Desktop\Backup1\Project\ReportsFolder\ReportSalesInvoice.rpt");
对于上面的代码,Report可以正常工作,但我想给出一个相对路径,这样我就可以在多台机器上安装它,而无需更改路径。 我还尝试了以下途径

string loc = AppDomain.CurrentDomain.BaseDirectory;
string loc2 = Application.StartupPath;
string loc3 = Application.UserAppDataPath;
string loc4 = Application.CommonAppDataPath;                
把它们当作,

report.Load(loc2 + "\\ReportSalesInvoice.rpt");

但无法访问该文件。请帮助。

尚未在windows应用程序中测试,但这是我在MVC3中使用的。我相信相对路径必须在应用程序的根目录中

    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Shared;

    using (var report = new ReportClass { FileName = Server.MapPath("/AppName/Reports/MyReport.rpt") })
    {
        report.Load();
    ...

那Environment.CurrentDirectory呢?它通常是相对文件的基础。您所说的“文件无法访问”是什么意思?尝试加载()时是否出现异常?为什么不将报表添加到项目中,使其始终成为解决方案的一个组成部分,并且更加“异常安全”?这将使从外部路径加载它的需要过时…是的,它给出了一个异常,即它找不到指定的路径。@Urik umm我将尝试它。。。谢谢你的回复
private void Crystal_rpt()
{
  ReportDocument dir = new ReportDocument();
  dir = functions.Show_Crystal_rpt();
  dir.Load(Application.StartupPath + "\\rptObt_mark.rpt");
  crpMark_sheet.ReportSource = dir;
}