.net core Dotnet Core应用程序在WSL2中运行时获取Windows路径

.net core Dotnet Core应用程序在WSL2中运行时获取Windows路径,.net-core,windows-subsystem-for-linux,.net Core,Windows Subsystem For Linux,我正在Visual Studio 2019中构建一个C#Dotnet核心应用程序。当我调试它时,路径按预期工作,但当我从WSL2终端运行它时,我会得到Windows路径 下面是一个简单的测试应用程序: static void Main(string[] args) { Console.WriteLine(Directory.GetCurrentDirectory()); if (Directory.Exists("/mnt/c/test&

我正在Visual Studio 2019中构建一个C#Dotnet核心应用程序。当我调试它时,路径按预期工作,但当我从WSL2终端运行它时,我会得到Windows路径

下面是一个简单的测试应用程序:

    static void Main(string[] args)
    {
        Console.WriteLine(Directory.GetCurrentDirectory());
        if (Directory.Exists("/mnt/c/test")
            Console.WriteLine("exists");
        else
            Console.WriteLine("not found");
    }
调试输出:

/mnt/c/Users/username/source/repos/testrun/testrun/bin/Release/netcoreapp3.1
exists
从WLS2命令提示符运行:

user@machine:/mnt/c/Users/username/source/repos/testrun/testrun/bin/Release/netcoreapp3.1$ ./test.exe
C:\Users\username\source\repos\testrun\testrun\bin\Release\netcoreapp3.1
not found
这似乎有点奇怪,因为我原以为从WSL2内部启动应用程序会导致它在WSL2下运行,而不是在Windows下运行。输出在WSL2终端中


如何使其在具有WSL2路径的WSL2下运行?

结果表明,这种行为是预期的。默认情况下,VisualStudio在未在WSL2下调试时生成Windows可执行文件。因为我将调试构建设置为使用WSL2,所以该构建生成了一个Linux可执行文件

WSL2可以运行Windows可执行文件。它们在主机Windows操作系统下启动。您甚至可以在Windows和Linux可执行文件之间进行管道连接,除了与路径有关的问题外,它基本上是透明的

为了构建Linux可执行文件,您需要发布dotnet项目。您可以使用
dotnetpublish
从命令行执行此操作,也可以右键单击Visual Studio中的项目并选择“发布”。确保您发布了一个Linux可执行文件,结果将如预期的那样