我遇到了这个问题,并且通过很多挫折将它隔离开来。 当我从另一个文件夹中拖动我的exe文件时,与命令行参数无关的位图声明会引发异常" System.ArgumentException:参数无效"。
以下情况不会发生:
以下是产生此错误的最小代码:
int num = 0;
do {
if (num<0){
System.out.println("You printed out a negative number");
}
System.out.println("Enter a natural number ");
int num=type.nextInt();
} while (num<0);
答案 0 :(得分:0)
如果只提供文件名,则假定该文件位于当前目录中。当前目录在启动时并不总是相同,并且在应用程序运行时也可以更改。
我猜测该文件与EXE位于同一个文件夹中。在这种情况下,当代码工作时,当前目录必须是应用程序文件夹,如果失败,当前目录必须是其他文件夹。
我们经常在使用Process.Start
游戏时看到类似的问题。许多游戏都按照您的要求进行操作,并假设当前目录是应用程序文件夹。如果您从命令行等运行游戏,那么它将是。如果您使用Process.Start
从代码运行游戏,新进程将实际继承应用程序的当前目录,并且这类代码将失败。
解决方案是始终明确文件的路径。如果要打开应用程序文件夹中的文件,请准确指定:
Dim logo As New Bitmap(IO.Path.Combine(Application.StartupPath, "logo.png"))
该代码并不依赖于当前目录作为特定文件夹,因此如果不是,则不会受到影响。