C# Winform根目录路径。如何再次!

C# Winform根目录路径。如何再次!,c#,winforms,deployment,C#,Winforms,Deployment,首先,大家好,我很抱歉问了这么一个简单但又多余的问题,但我的情况似乎有点不同,谷歌没有提供答案。 我有一个包含两个项目的解决方案,比如proj1和proj2,其中proj1是一个winform应用程序,proj2是一个类库应用程序 C:\Documents and Settings\myname\MyDocuments\Visual Studio 2005\Projects\proj1\proj1 类库在这里吗 C:\Documents and Settings\myname\MyDocumen

首先,大家好,我很抱歉问了这么一个简单但又多余的问题,但我的情况似乎有点不同,谷歌没有提供答案。 我有一个包含两个项目的解决方案,比如proj1和proj2,其中proj1是一个winform应用程序,proj2是一个类库应用程序

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

类库在这里吗

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

现在我在子文件夹报告中有一个报告,其中有我的crystalreport和其他资料 我需要proj1的根路径

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

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

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

从我在网上搜索的所有信息中 类似于
Environment.CurrentDirectory
Application.StartupPath
Application.ExecutablePath
System.Reflection.Assembly.GetExecutionGassembly().Location
只是给了我bin/proj1.exe或debug文件夹。 我就是不知道该怎么做

谢谢你读这篇文章。哦,是的!谢谢你善意的回答。
PS:使用C#2.0,我认为查找程序集所在文件夹的最安全方法是:

private static string GetAppFolder()
{
    return new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;
}
…使用该功能,您可以获得报告路径:

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

您只需将报告文件的属性“Copy to Output Directory”设置为“Copy allways”或“Copy if newer”。这将在生成期间将报表复制到实际输出目录下,您可以使用
Path.Combine(Application.StartupPath,“Reports”,“report.rpt”)

从编译的程序集中获取项目文件夹,因为(据我所知)它不知道从何处编译而来。但是,您将获得程序集运行所在的文件夹,即从
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:\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感谢您的快速回复。我用一个消息框输出您的建议,我有一个…\bin\debug\Report\myreport.rpt。我想如果您在Visual Studio中运行应用程序,它对我的案例不起作用,如果您正在运行调试生成,它将从bin\debug目录运行。如果将.exe文件(和报表目录)移动到其他目录,则GetAppPath()将返回该目录。“bin\debug”部分未编译到程序中。我认为“报告”是你的.exe文件所在目录的子目录吗?谢谢你的建议。我只是用一个messagebox输出内容并查看调试文件夹内的内容。这是正确的,我还没有将其合并到我的项目中,但我相信它会起作用。没有路径。可能在3.5上加入我的.Net 2.0,但无论如何我使用路径。合并。谢谢都德谢谢你的回复。我使用了Daniel的方法,但是你的方法和他的非常相似。因为我需要对报告进行进一步的更改,所以我希望仍然可以通过解决方案资源管理器进行访问,我选择了他的。非常感谢你看到这个 C:\Program Files\proj1\proj1.exe C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\Reports\myreport.rpt
string path =new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName