如何获取应用程序路径

15
我使用string path = AppDomain.CurrentDomain.BaseDirectory;获取应用程序路径,但这会返回一些类似于
C:\Projects\XYZ\ABC\bin\Debug

我不想要 bin\Debug。有没有办法实现这个?


3
你需要的是项目文件的位置还是正在运行的可执行文件的位置? - Lasse V. Karlsen
请描述获取预期结果的规则。 - Anton Semenov
5
暗中尝试 - @George,您是否正在尝试从在Visual Studio下运行的程序中访问项目目录中的配置文件或其他资源?如果是这样,您可以将它们设置为复制到构建目录中,这样您的引用就会正常工作。 - dsolimano
7个回答

16
AppDomain.CurrentDomain.BaseDirectory属性获取程序集解析器用于查找程序集的基目录。
因此,它完全按照应有的方式运行。如果您构建应用程序并将其剪切并粘贴到另一个文件夹或驱动器中,则此属性将反映这些更改。
此外,您提到您不想要bin\Debug这部分,所以您想要它之前的内容?请具体说明。

1
是的,我想要 bin\Debug 之前的所有内容。 - user339160
2
@George:您应该意识到这将是一些硬编码的东西,完全没有灵活性,对吧?如果这正是您想要的,请忽略此提示。但或许您应该编辑您的问题,并详细解释您想要的最终结果是什么。目标是什么? - Only Bolivian Here

16

获得想要的:

var enviroment = System.Environment.CurrentDirectory;
string projectDirectory = Directory.GetParent(enviroment).Parent.FullName;

这是对问题的最佳答案。恭喜,Fredy。 - Pedro Coelho
靶心。它会给你准确的项目文件夹路径,而不是bin/debug。谢谢Fredy。 - NeoDeveloper

2
说实话,这不是最好的做法,但可以得到你想要的结果:
string dir = System.IO.Directory.GetCurrentDirectory().Replace("\\bin\\Debug", "");

如果应用程序在IIS上运行,这种方法可能不起作用,因为它会返回IIS目录。 - Qrom

2
string LPath;
string Location = AppDomain.CurrentDomain.BaseDirectory + "Reports\\rptEmployInfoStat.rpt";
int index;
index = Location.IndexOf("bin");
if (index > 0)
{
     LPath = Location.Remove(index, 10);
}
else
{
     LPath = Location;
}
rd.Load(@LPath);

2

如果你想找出应用程序的可执行路径(就我所理解的):

string path = Application.ExecutablePath;

2
如果你想获取应用程序路径,最好使用 Application.StartupPath:它与 exeName 不同,但是相同。 - Redax

1

你是在IDE中运行程序,这就是你得到这种路径的原因。尝试构建应用并在IDE外运行它 - 你会发现该方法可以正常工作。

编辑:你获得的是因为IDE运行了你的应用程序的调试版本,该版本位于$PROJECT_DIR\bin\Debug中。


1
这与你是否在调试器中运行无关,而是与EXE文件的位置有关。默认情况下,调试版本会放在<project_path>\bin\Debug中,发布版本会放在<project_path>\bin\Release中。调试器是无关紧要的——它严格属于您的构建设置属性。 - Joe White
@Joe:你刚刚开启了我的思维,并为我带来了千年的智慧。谢谢你。 - iehrlich

0

我正在使用这个:

String appSettingsPath = Directory.GetCurrentDirectory();

        if (!File.Exists(Path.Combine(appSettingsPath, "appsettings.json")))
            appSettingsPath = Path.GetDirectoryName(Path.GetDirectoryName(appSettingsPath));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接