我使用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
的路径
发布于 2019-08-02 23:01:04
我猜你不能在运行时得到它,但是在前后事件中,有几个变量可以使用,如果你想做的事情可以在编译之前或之后解决的话。
其中两个变量是:
$(ProjectDir)
:项目文件夹
$(OutDir)
:类似于"bin\Debug\netcoreapp2.2\"
的东西
您可以在项目文件.csproj
中指定CMD脚本,例如:
<Project Sdk="Microsoft.NET.Sdk">
...
<Target Name="PostBuild" BeforeTargets="PostBuildEvent">
<Exec Command="echo "$(ProjectDir)$(OutDir)""/>
</Target>
...
<Project Sdk="Microsoft.NET.Sdk">
https://stackoverflow.com/questions/51216716
复制相似问题