Mono使用错误的当前目录执行程序

时间:2016-09-20 18:53:21

标签: c# linux path mono raspberry-pi

我有一个奇怪的问题。我在C#.NET 4.6中编写了一个自定义垃圾邮件过滤器供个人使用。我把这个程序放到我的Raspberry Pi上。

我已经测试了很多次程序,一切正常,但是当我创建一个cronjob时,我注意到程序从不写日志。

当我再次开始测试时,我发现问题是,当我从程序的基础目录启动程序时,它运行正常:

> cd path/to/program
> mono program.exe

但是当我从具有绝对路径的另一个目录启动它时:

> mono /absolute/path/to/program/program.exe

所需文件的相对路径出错。

例如,如果我在/ home目录中,并且我的程序在/ home / user / program目录中,我运行它:

> mono /home/user/program/program.exe

我收到“无法找到文件”/home/xyz.txt“”

我尝试使用Path.GetFullPath()Environment.CurrentDirectory从程序中的相对路径创建绝对路径,但没有任何改变。

所以我的问题是:有没有选项在另一个目录中使用正确的当前目录运行单声道程序?

我知道bash脚本可以执行我的第一个解决方案(cd然后是单声道),它可以在cron中使用,但我想知道是否有更简单的解决方案。

1 个答案:

答案 0 :(得分:1)

当前目录正确,它是开始进程的当前目录,在这种情况下该进程为mono,并且单声道正在加载的基于CIL的程序集的位置。

你想要的是ExecutingAssembly

的路径

这适用于x-plat(Windows / Linux / macOS):

string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
Console.WriteLine(path);

参考:https://msdn.microsoft.com/en-us/library/aa457089.aspx