2010-07-21 106 views
1

我有一个正常编译的C#项目。当我通过Visual Studio的IDE运行该项目时,它运行良好并且干净地结束。但是,当我导航到项目目录并尝试通过双击“exe”文件或通过运行窗口引用它时运行该程序时,它会出错。C#命令行项目 - 通过.exe运行时出错

我已经缩小的问题降到

Console.WriteLine("output ->" + any_variable); 

出于某种原因,如果我使用Console.WriteLine命令的应用程序,如果如前面所述RAN将错误打印的任何变量。

如果我把这行写出来,Visual Studio创建的可执行文件将运行得很好,如果我双击它。我真的很困惑。我的目标是将此命令行项目创建为计划任务。

+0

如果运行命令提示符下的应用程序,它应该打印如果堆栈跟踪在调试模式下运行,则退出堆栈跟踪。应该给你更多的想法,如果不是,请发布堆栈跟踪。 (并从问题中删除asp.net标记) – Jaymz 2010-07-21 21:06:00

+0

请检查我的更新并向我们提供更多代码或异常详细信息。 – 2010-07-21 21:34:07

回答

4

我会认为错误没有任何关系WriteLine甚至Console。从IDE运行和双击运行之间的常见区别可能是权限(也就是说,您可以以管理员身份启动IDE,或者您正在写入/读取的位置不同,并且具有不同的ACL附加到它),这里似乎并不是这种情况。

要捕捉到您的实际错误,请编译为调试模式。启动您的应用程序(可能带有某种消息框)。启动IDE并选择“调试并附加”进行处理(如果用消息框暂停应用程序,则可以随时使用)。选择你的过程。运行,直到收到错误。即使应用程序是通过双击EXE运行的,您现在仍应该在IDE中收到错误。您可以像往常一样查看堆栈并进行调试。

我的猜测是?您正在打印的变量会引起错误。

替代方案:围绕违规声明的简单尝试/捕获以及带有Exception.Message的消息框应该会给你更多的英特尔。

+0

谢谢,原来这是我参考过的一个项目的问题。捕捉到错误清楚的异常后。我不确定为什么被引用的项目没有被应用到.exe文件,而在IDE中正常工作,但我会继续搜索。如果有人可能知道答案,它也会有很大帮助。 – Ryan 2010-07-22 16:38:22

+0

@Ryan,新的信息对于一个新问题听起来很棒。如果你认为这个或那个问题是你的(原始)问题的答案,一定要将它标记为(左边的绿色复选标记),你甚至可以在这样做时获得积分。欢迎来到SO!并看看这里的一些提示:http://stackoverflow.com/faq – Abel 2010-07-23 07:31:01

1

对不起,我错了......所以编辑

将你的代码尝试{}赶上{}结构:

try 
{ 
//your code goes here 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("An error occured: {0}", ex.Message); 
    if (ex.InnerException != null) 
     Console.WriteLine("Inner Exception: {0}", ex.InnerException.Message); 
    Console.WriteLine("Stack Trace: {0}", ex.StackTrace); 
} 

这时,只需要找出均是你的问题,在哪一行代码等

+0

虽然我同意你的观察,但为什么会在IDE和外部运行之间产生差异呢?它实际上应该给你一个编译时错误。 – Abel 2010-07-21 21:08:31

+1

实际上,字符串“+”运算符的第二个参数可以是任何类型。字符串会自动调用'ToString()'。 – 2010-07-21 21:10:08

+0

啊,现在我觉得很蠢,你说得对!我应该停止混合语言:) – Abel 2010-07-21 21:20:35