Visual Studio MSIX发布-加载XML配置文件不工作

cyvaqqii  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(156)

我正在使用Visual Studio 2022创建一个.NET 7应用程序。
我的项目中有一个config.xml文件,我的应用程序会加载该文件。当我正常构建和运行应用程序时,一切都很好。但是,当我从MSIX包中生成并运行应用程序时,XML文件将不会加载。
以下是我的项目结构:

-> Solution
----> Project_a  (Main entry point)
----> Project_b  (DLL)
------> my_config.xml
----> MSIX_APPLICATION

我有一个post build事件,它将my_config.xml从Project_b复制到project_a的build文件夹中。
如前所述,在正常运行我的应用程序时,所有工作正常,但通过MSIX应用程序包运行时就不行了。它不会找到并加载my_config. xml。
当我进入MSIX将其安装到的位置c:\program_files\WindowsApp\<myapp>目录时,我可以看到my_config. xml文件与二进制文件一起存在。如果我从那里运行主二进制文件,似乎可以很好地加载XML文件。
有什么想法吗?

kqqjbcuj

kqqjbcuj1#

这似乎是在不同/不正确的当前工作目录下运行EXE的情况。
如果我没记错的话,默认情况下,通过MSIX安装的系统将以System32作为默认工作目录启动,如果没有另外指定的话。
试试specifying your install folder as the working dir,看看是否有帮助。

imzjd6km

imzjd6km2#

@Bogdan Mitrache向我透露了这个问题,并提出了正确的答案。
问题是,当您将应用程序作为MSIX WinApp包运行时,当前工作目录设置为c:\windows\system32,而不是二进制文件在计算机上的实际位置。这将是类似于C:\Program Files\WindowsApps\f41f91a1-90e0-4fc7-a429-004ed3423fdd_0.1.1.0_x64__89c53gqcdr1he\Your_app_name的东西。
我所做的是,而不是试图在我的代码中加载./my_config.xml,我首先得到了二进制文件的安装位置。你可以这样做:
string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
然后,我将xml文件名连接到该字符串,并使用该字符串作为加载它的路径。
我希望这对某人有帮助。

相关问题