通过 ClickOnce 发布后找到 'Application Files' 目录

Find 'Application Files' directory after publish by ClickOnce

在 C# 中使用 ClickOnce 发布后,我对如何找到文件夹的目录感到非常困惑:'Application Files'。我想这样做的原因是我想把一些文件放到这个文件夹中,让 C# 在用户安装我的应用程序后读取它们。

我试过:System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), 但我总是喜欢:C:\Users\AppData\Local\Apps.0DAZ7HKJ.7TP\OZ02N2HD.7PG\cons..tion_a9321ce7eb14b63e_0001.0000_7ed45506b35ff771,我不想要。由于我的发布文件夹在 D:\ 中,我想要的是:D:\Application Files.

提前感谢阅读我的问题的任何人!

要将文件包含到您的发布中,您不需要手动将其包含在文件夹中,而是应该将文件添加到您的项目并将其 Build Action 设置为 Content。为确保文件包含在发布中,请转到 Project → Properties → Publish Tab → Application Files Button 并查看文件的 Publish Status 是否为 Include (Auto).

部署应用程序后,这些文件将部署在应用程序可执行文件附近。例如,如果您包含 image.png,那么您可以这样找到它:

var path = System.IO.Path.Combine(Application.StartupPath, "image.png");

此外,如果出于任何原因您正在寻找您的发布文件夹,您可以在项目文件的 Project → Properties → Publish → Publish Location<PublishUrl> 标记中看到您用于发布的路径。

无论您发布文件的位置如何,在您项目的 \bin\debug 文件夹中的 app.publish 文件夹下都有它们的副本。

沿着这条你不想要的路径,你找到了一个能够尊重你期望使用的东西的可执行文件 System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)

对于那些寻找 WPF 方式的人,这里有两个等效的方法:

var appPath = System.AppDomain.CurrentDomain.BaseDirectory

var appPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)

然后像这样使用它:

var path = System.IO.Path.Combine(appPath, "image.png");