kernel32.dll中的EntryPointNotFoundException SetEnvironmentVariable

时间:2015-09-29 15:39:55

标签: c# xamarin mono

我在mac上使用mono和xamarin作为IDE运行c#应用程序。 在我的主要方法中,我有:

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling=false)]
 public static extern bool SetEnvironmentVariable(string lpName, string lpValue);

然后当我打电话时:

SetEnvironmentVariable("PATH", path);

我得到一个EntryPointNotFoundException

System.EntryPointNotFoundException: SetEnvironmentVariable
at at (wrapper managed-to-native) EICService.Program:SetEnvironmentVariable (string,string)
at EICService.Program.Main (System.String[] rawArgs) [0x00031] in (*my path*)/Program.cs:34

现在我知道在mac上调用kernel32.dll是一个问题,但我认为它是找到它或任何单声道有替代它,因为如果我把一些虚拟dll文件名,我得到一个DLL没有找到错误。

我非常喜欢使用c#,但是这个代码在windows上运行,我们只想让它在unix上运行。

任何想法?

1 个答案:

答案 0 :(得分:4)

这是一个Windows API函数。它根本不存在于Mac上。因此错误。

您不需要p / invoke此函数来在流程环境中设置变量。您可以使用本机.net功能。那是Environment.SetEnvironmentVariable

更重要的是,你应该在Windows上做同样的事情。 p / inv引用本机函数来执行.net运行时库提供的功能绝不是一个好主意。