【问题标题】:File cannot be found when relative path is used使用相对路径时找不到文件
【发布时间】:2013-03-15 16:04:55
【问题描述】:

在我的 WPF caliburn.micro 应用程序中,我使用 ComponentOne 的 C1DocumentViewer 来显示报告。

我在项目中创建了一个新文件夹“报告”并将 .xml 放在那里。我使用C1DocumentViewer 显示报告。当提供 .xml 文件的绝对路径时,它可以正常工作。但当然我需要使用相对路径。因此,如果我将其设为“../../MyProject/Reports/MyReport.xml”,那么当我在 Visual Studio 中运行它时,它就可以在我的机器上运行。但不是当我使用 ClickOnce 发布它时,它只是找不到文件。如果我使用“/Reports/MyReport.xml”或“Reports/MyReport.xml”也是一样。 当我在 Visual Studio 中调试时尝试使用“Reports/MyReport.xml”时,它正在解决方案主项目的 bin/Debug 中查找路径“Reports/MyReport.xml”。

请帮忙。这是我的代码:

        protected override void OnViewLoaded(object view)
    {
        base.OnViewLoaded(view);

        var rpt = new C1.C1Report.C1Report();

        rpt.Load(@"Reports/MyReport.xml", "Recent Files Information");

        rpt.DataSource.RecordSource = "MyReportProc(1)";
        rpt.Render();
        Report = rpt.FixedDocumentSequence;
    }

【问题讨论】:

    标签: wpf componentone


    【解决方案1】:

    只是猜测。您的问题可能与您的进程的working directory 有关。

    当进程使用简单文件名或相对文件引用文件时 路径(而不是由根的完整路径指定的文件 目录),引用被解释为相对于当前 进程的工作目录。

    在 Visual Studio 中运行程序时以及在使用 ClickOnce 发布程序后运行程序时使用 Directory.GetCurrentDirectory() 检查它。

    【讨论】:

    • @DavidShochet 您是否检查过“../../MyProject/Reports/MyReport.xml”是安装后运行程序时 GetCurrentDirectory() 返回的工作目录的正确相对路径通过 ClickOnce?
    • 我根本看不到 .xml 文件。看起来 ClickOnce 只是没有将其复制到目的地。
    • 我这样使用它:rpt.Load(Environment.CurrentDirectory + @"\Reports\RecentFilesInformation.xml", "Recent Files Information");这样,当重新构建解决方案时,将带有 .xml 文件的 Reports 文件夹复制到主项目的 bin/Debug 中,然后在从 Visual Studio 运行时工作。但是当我发布它时,找不到 .xml,它在目标文件夹中不存在。我猜 .xml 文件属性可能会阻止 ClickOnce 将其复制到目标路径。
    • @DavidShochet 也许这里的答案:stackoverflow.com/questions/5605936/clickonce-file-missing 也可以帮助你。
    • 谢谢比尔,是的,当我将报告放入主项目时,这有效。但是是否可以将其添加为链接,以便项目不在主项目中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2021-06-05
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多