我使用Windows (v2.1.301)创建了一个解决方案,创建了一个控制台项目,并将该项目添加到了.NET上的解决方案中。
dotnet new sln -o ConsoleSol
dotnet new console -o ConsoleSol/ConsoleApp
dotnet sln ConsoleSol/ConsoleSol.sln add ConsoleSol/ConsoleApp/ConsoleApp.csproj
文件夹结构如下所示:
ConsoleSol/
├── ConsoleApp
│ ├── bin
│ │ └── Debug
│ │ └── netcoreapp2.1
│ ├── ConsoleApp.csproj
│ ├── obj
│ │ ├── Debug
│ │ │ └── netcoreapp2.1
│ │ └── project.assets.json
│ └── Program.cs
└── ConsoleSol.sln
我希望在不对路径进行硬编码的情况下获得ConsoleSol/ConsoleApp
的路径。我想这样做的原因是,我可以在该目录上创建一个文件。
如何从Program.cs获取ConsoleSol/ConsoleApp
的路径(即ConsoleApp.csproj和Progam.cs所在的路径)?
我尝试了以下几种方法:
class Program
{
static void Main(string[] args)
{
var directory = Directory.GetCurrentDirectory();
Console.WriteLine(directory);
}
}
但是Directory.GetCurrentDirectory()
会返回ConsoleSol/ConsoleApp/bin/Debug/netcoreapp2.1
的路径
注意:我不想获取.exe的路径,它可以通过调用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
获得。相反,我正在尝试获取Program.cs
的路径
发布于 2018-07-07 04:53:21
由于人们只能获得.NET执行程序集的路径,而程序集可以存储在磁盘上的任何位置,因此无法获得程序集的任何源文件的路径。当然,除非您是从项目中创建的/bin路径执行的。
一旦移动了程序集,就无法使用其当前路径回溯到用于创建该程序集的源文件的路径。
发布于 2018-07-07 03:45:03
对当前目录调用Path.GetDirectoryName
两次。
https://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx
发布于 2018-07-07 03:46:34
https://stackoverflow.com/questions/51216716
复制相似问题