【问题标题】:Winform root directory path.How to again!Winform根目录路径。如何再次!
【发布时间】:2010-10-25 20:08:46
【问题描述】:

大家好,首先为提出这样一个简单但多余的问题而道歉,但我的情况似乎有点不同,谷歌搜索未能提供答案。 我有 2 个项目的解决方案,比如 proj1 和 proj2,其中 proj1 是一个 winform 应用程序,proj2 是一个类库应用程序。proj1 就在这里

C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\proj1

类库在这里

C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\proj2

现在我在子文件夹 Report 中有一份报告,其中有我的水晶报告和其他东西 我需要这个 proj1 的根路径

C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\proj1

所以我将@"Report\myreport.rpt" 附加到它。我相信它应该是已部署机器上的相对路径。如果我错了,请纠正我。主要思想是在

处拥有 Report 文件夹的相对路径

C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\proj\Report。

根据我在网上搜索的所有内容 像 Environment.CurrentDirectoryApplication.StartupPathApplication.ExecutablePathSystem.Reflection.Assembly.GetExecutingAssembly().Location 只是给了我 bin/proj1.exe 或调试文件夹。 我只是不知道该怎么做

感谢您阅读本文。哦,是的!并为你的好意回答。 PS:使用 C#2.0

【问题讨论】:

标签: c# winforms deployment


【解决方案1】:

您只需将报告文件的属性Copy to Output Directory 设置为Copy allways 或“如果更新则复制”。这将在构建期间将报告复制到实际输出目录下,您可以使用Path.Combine(Application.StartupPath, "Reports", "report.rpt") 访问它。

【讨论】:

  • 感谢您的建议。我只是用消息框输出内容并在调试文件夹中查看。这是正确的,我还没有将它合并到我的项目中,但我相信它会起作用。有在我的 .Net 2.0 中没有 Path.Join 可能在 3.5 上,但无论如何我使用 Path.combine。谢谢老兄
【解决方案2】:

您不会从已编译的程序集中获取 project 文件夹,因为(据我所知)它不知道它是从哪里编译的。但是,您将获得运行程序集的文件夹,这是您从Application.ExecutablePath 获得的“调试文件夹”。

您最好将报告复制到报告文件夹中的 bin/debug 文件夹中,然后从那里访问它们(您可以使用Application.ExecutablePath 获取此信息)。然后当你需要移动编译好的文件时,可以移动Reports文件夹。

当您部署时,您将拥有以下结构:

C:\Program Files\proj1\proj1.exe
C:\Program Files\proj1\Reports\myreport.rpt

而不是以下(这是您的建议?):

C:\Program Files\proj1\proj1.exe
C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\Reports\myreport.rpt

【讨论】:

  • 感谢您的回复。我使用了 Daniel 的方法,但您的方法和他的方法非常相似。因为我需要对报告进行进一步更改,所以我希望仍然可以通过解决方案资源管理器访问我选择他的方法。非常感谢
【解决方案3】:
string path =new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName

【讨论】:

    【解决方案4】:

    我认为查找程序集所在文件夹的最安全方法是:

    private static string GetAppFolder()
    {
        return new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;
    }
    

    ...使用该函数,您可以获得报告路径:

    Path.Combine(GetAppFolder(), @"Report\myreport.rpt")
    

    【讨论】:

    • 感谢您的快速回复。我用消息框输出您的建议,我正在使用这个 ...\bin\debug\Report\myreport.rpt。我猜它对我的不起作用案例
    • 如果您从 Visual Studio 中运行应用程序,并且如果您正在运行调试版本,它将从 bin\debug 目录运行。如果您将 .exe 文件(和 Report 目录)移动到其他目录,GetAppPath() 将改为返回该目录。 “bin\debug”部分未编译到程序中。我假设“报告”是您的 .exe 文件所在目录的子目录?
    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 2022-12-13
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多