我正在使用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文件。
有什么想法吗?
2条答案
按热度按时间kqqjbcuj1#
这似乎是在不同/不正确的当前工作目录下运行EXE的情况。
如果我没记错的话,默认情况下,通过MSIX安装的系统将以System32作为默认工作目录启动,如果没有另外指定的话。
试试specifying your install folder as the working dir,看看是否有帮助。
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文件名连接到该字符串,并使用该字符串作为加载它的路径。
我希望这对某人有帮助。