.NET Core 中的路径问题
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
摘要:?.NET Core 應(yīng)用程序相對(duì)于以前的.NET Framework 應(yīng)用程序在啟動(dòng)運(yùn)行的方式上有一定的差異,今天就來談一談這個(gè)獲取應(yīng)用程序啟動(dòng)路徑的問題。
.NET Core 應(yīng)用程序相對(duì)于以前的.NET Framework 應(yīng)用程序在啟動(dòng)運(yùn)行的方式上有一定的差異,今天就來談一談這個(gè)獲取應(yīng)用程序啟動(dòng)路徑的問題。
1.工作路徑 WorkingDirectory
下面的兩種方式都可以獲取工作路徑,結(jié)果都是一樣的:
Environment.CurrentDirectory; Directory.GetCurrentDirectory();其實(shí)所謂的工作路徑就是我們應(yīng)用程序的啟動(dòng)路徑,所以我們平時(shí)所說的獲取應(yīng)用程序的啟動(dòng)路徑,也是通過上面的方式。
(1)我們通過VS F5直接運(yùn)行
VS會(huì)先編譯我們的項(xiàng)目,輸出到Debug對(duì)應(yīng)的sdk版本 目錄下,然后以這個(gè)目錄作為工作路徑,啟動(dòng)我們的應(yīng)用程序。
(2)通過dotnet 命令運(yùn)行
我們?cè)陧?xiàng)目根目錄,執(zhí)行?dotnet run命令:
我們執(zhí)行?dotnet run命令來啟動(dòng)時(shí),對(duì)于程序的工作路徑就是執(zhí)行命令的路徑,所以說,獲取到的路徑變化了。但是我們通過dotnet run命令運(yùn)行的應(yīng)用程序文件實(shí)際所在的目錄也是和上面的目錄一樣的,即:Debug對(duì)應(yīng)的sdk版本,我們可以通過代碼來測(cè)試一下:
新加的代碼是獲取程序集所在的路徑,可以發(fā)現(xiàn)也是在 Debug對(duì)應(yīng)的sdk版本 目錄下的。
我們將程序發(fā)布到?D:\test?目錄下
可以看到,前兩種方式獲取到的都是執(zhí)行dotnet命令所在的目錄即工作目錄,后一種方式是獲取到的我們應(yīng)用程序所在的目錄。
2.結(jié)論
通過上面的測(cè)試,我們可以得出結(jié)論,.NET Core 應(yīng)用程序獲取工作路徑/啟動(dòng)路徑,就是獲取的執(zhí)行dotnet命令時(shí)所在的目錄,所以當(dāng)我們?cè)贚inux等系統(tǒng)部署時(shí),設(shè)置守護(hù)進(jìn)程時(shí),記得一定要將工作路徑設(shè)置為程序文件所在的目錄,不然應(yīng)用程序獲取到的路徑將不會(huì)是應(yīng)用程序文件所在的目錄,當(dāng)我們?cè)趹?yīng)用程序里設(shè)置了一些相對(duì)路徑,諸如讀取配置文件,寫日志(Log4net、NLog),將會(huì)與我們的預(yù)期不一樣。因?yàn)橄鄬?duì)路徑,是默認(rèn)相對(duì)于應(yīng)用程序的工作路徑的。
Environment.CurrentDirectory; //獲取應(yīng)用程序工作目錄 Directory.GetCurrentDirectory();//獲取應(yīng)用程序工作目錄(和上面的方式效果是一樣的)Path.GetDirectoryName(typeof(Program).Assembly.Location);//獲取應(yīng)用程序所在目錄(絕對(duì),不受工轉(zhuǎn)載于:https://my.oschina.net/u/3722671/blog/1835059
總結(jié)
以上是生活随笔為你收集整理的.NET Core 中的路径问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: orcale存储过程学习之路(一)
- 下一篇: WPF中Expander与ListBox