如何在C#.NET中指定应用程序路径?

3

我正在使用.net中的类库在C#方法中编写必要的业务逻辑。在类库的每个类中,我编写了一个单独的方法来服务于特定的目的。我的项目文件夹存储在F:驱动器上,其中包含了一个名为XML的文件夹和一个XML文件。现在我该如何在C#中指定应用程序路径,并使用该路径来指定XML文件的路径?您能否提供代码或任何链接,以解决上述问题?除了上述方式之外,还有其他动态指定XML文件路径的方法吗?


https://dev59.com/GkrSa4cB1Zd3GeqPWGYQ - Arslan
4个回答

2

您是否拥有与可执行文件/类库相关的XML文件?如果是这样,只需获取程序集对象并检索其位置。

使用System.Reflection.Assembly.GetExecutingAssembly()获取程序集对象。这将是调用GetExecutingAssembly的程序集-因此,如果您在类库中调用此函数,它将返回类库程序集。Assembly.Location包含程序集的路径,您可以使用System.IO.Path中的函数修改路径以指向子目录。


如果如您在评论中所示,XML文件是嵌入式资源,则可以使用以下代码检索它们:

var asm = System.Reflection.Assembly.GetExecutingAssembly();
foreach (string resourceName in asm.GetManifestResourceNames()) {
    var stream = asm.GetManifestResourceStream(resourceName);
    // Do something with stream
}

在这种情况下,我不知道是否有可能使用其中一个文件的路径来加载它,但是大多数处理文件的.NET类无论如何都可以使用流。

2

AppDomain.CurrentDomain.BaseDirectory


我不明白这怎么可能是被接受的答案。这也不一定是类库的路径(刚测试过:在这个测试中,它是可执行文件的目录),也不能用来加载嵌入式资源,这正是Shailesh Jaiswal在评论中要求的(现已删除的)答案。我没有投反对票,因为这可能是他真正想问的,尽管从问题中完全不清楚。 - OregonGhost
我只关注于这句话:
现在我应该如何在C#中给出应用程序路径,然后使用该路径来指定XML文件的路径?
- Scordo
没有冒犯之意,没关系。我只是不明白为什么这个答案被接受了,因为Shailesh Jaiswal说他想要提取嵌入式资源和/或想要一个相对于类库的路径,但他接受了一个会给他一个相对于可执行文件的路径(很可能),并且不会提取资源的答案。它与额外的信息不完全匹配。然而,这无所谓。 - OregonGhost

0
你正在寻找Application.ExecutablePath吗? 那么你可以使用IO.Path.Combine(IO.Path.GetDirectoryName(Application.ExecutablePath),"XML")来获取所需的xml文件位置。

3
回答很中肯,但遗憾的是它只适用于WinForms,并不能用于控制台应用程序或WPF... - Timwi
你可以尝试使用Environment.GetCommandLineArgs返回的第一个字符串,而不是Application.Executable路径。 - munissor
从文档中可以看到:程序文件名可以包含路径信息,但不是必需的。不幸的是,由于这个原因,您不能依赖Environment.GetCommandLineArgs来获取路径信息。 - OregonGhost
我知道,我只是“尝试”评论它是否有效,也许对于Shailesh的情况来说是可以接受的。 - munissor

0

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