C#应用程序不';我不能在其他计算机上工作

C#应用程序不';我不能在其他计算机上工作,c#,ioexception,C#,Ioexception,为什么我用C#编译的应用程序不能在其他计算机上运行 我已经安装了.Net Framework 4.0 当我在另一台计算机上打开我的.exe时,我得到错误信息: ERROR SIGNATURE: Event Type: clr20r3 P1: myapp.exe P2: 1.0.0.0 P3: 502051f P4: myapp P5: 1.0.0.0

为什么我用C#编译的应用程序不能在其他计算机上运行

我已经安装了.Net Framework 4.0

当我在另一台计算机上打开我的
.exe
时,我得到错误信息:

ERROR SIGNATURE:

    Event Type: clr20r3  
    P1:         myapp.exe 
    P2:         1.0.0.0
    P3:         502051f 
    P4:         myapp 
    P5:         1.0.0.0 
    P6:         502051f 
    P7:         2 
    P8:         6 
    P9:         System.IO.FileNotFoundException

system.io.filenotfoundexception
通常意味着您的程序试图打开一个不存在的文件。很可能您的程序正在尝试使用不存在的路径或文件名访问某些文件,或者该路径或文件名位于其他计算机上的其他位置。由于不知道myapp.exe应该做什么,我无法进一步回答


您的解决方案可能是重新编写应用程序,以便它以某种方式更好地处理该异常,例如在尝试打开文件之前检查文件是否存在。

A
system.io.filenotfoundexception
通常意味着您的程序试图打开一个不存在的文件。很可能您的程序正在尝试使用不存在的路径或文件名访问某些文件,或者该路径或文件名位于其他计算机上的其他位置。由于不知道myapp.exe应该做什么,我无法进一步回答


您的解决方案可能是重新编写应用程序,以便它在某种程度上更好地处理该异常,例如在尝试打开该文件之前检查该文件是否存在。

我觉得这就像是缺少引用的情况。检查解决方案资源管理器中的引用,或进入bin/debug或bin/release(取决于您的配置),并确保复制项目所依赖的所有DLL或EXE。在我看来,这似乎是缺少引用的情况。检查解决方案资源管理器中的引用或进入bin/debug或bin/release(取决于您的配置),并确保复制项目所依赖的所有DLL或EXE。应用程序很可能正在尝试加载程序集,但找不到它

有点离题,但理想情况下,对于任何希望添加一些“未处理”异常处理以写入日志文件或事件日志的应用程序,以便可以捕获更多的异常堆栈

通常,您只会收到最后一条异常消息,也看不到调用堆栈

您可以使用以下方法非常轻松地汇总异常:

string RollupException(Exception ex)
{
    StringBuilder sb = new StringBuilder();

    sb.Append(ex.Message);

    while(ex.InnerException != null) 
    {
         sb.Append(Environment.Newline);
         sb.Append(ex.Message);
         ex = ex.InnerException;
    }

    return sb.ToString();
}
您还可以使用
EventLog
类写入事件日志

此处的信息:


查看示例-记住首先注册事件源

应用程序很可能正在尝试加载程序集,但找不到该程序集

有点离题,但理想情况下,对于任何希望添加一些“未处理”异常处理以写入日志文件或事件日志的应用程序,以便可以捕获更多的异常堆栈

通常,您只会收到最后一条异常消息,也看不到调用堆栈

您可以使用以下方法非常轻松地汇总异常:

string RollupException(Exception ex)
{
    StringBuilder sb = new StringBuilder();

    sb.Append(ex.Message);

    while(ex.InnerException != null) 
    {
         sb.Append(Environment.Newline);
         sb.Append(ex.Message);
         ex = ex.InnerException;
    }

    return sb.ToString();
}
您还可以使用
EventLog
类写入事件日志

此处的信息:


查看示例-记住首先注册事件源

您的程序似乎缺少DLL(或DLL被放错了位置):

解决这个问题的一个简单方法是创建一个安装项目,然后将项目的依赖项捆绑到一个安装文件中。我认为如果您使用的是Visual Studio Express edition,则该选项不可用

如果您非常确定缺少的是.net framework,则以下工具将向您显示您的计算机/客户端上的内容,以便您可以找出缺少的内容:


希望对您有所帮助。

看起来您的程序缺少DLL(或者DLL被放错了位置):

解决这个问题的一个简单方法是创建一个安装项目,然后将项目的依赖项捆绑到一个安装文件中。我认为如果您使用的是Visual Studio Express edition,则该选项不可用

如果您非常确定缺少的是.net framework,则以下工具将向您显示您的计算机/客户端上的内容,以便您可以找出缺少的内容:


希望能有所帮助。

我也遇到了同样的问题,就像Joao最终发现的一样,这是由Windows窗体的线条形状造成的。这会将Microsoft.VisualBasic.PowerPacks引用添加到您的项目中。当您在没有安装PowerPacks的系统上运行它时,您只会得到一个毫无帮助的system.IO.FileNotFoundException错误,而不知道丢失了哪个文件

是的,我知道这应该得到解决,如果你去做一个适当的发行设置,这将提示用户安装…等麻烦,但我只想能够简单地复制我的EXE到另一个系统

解决方法:从窗体中删除任何线型,然后删除引用中对VisualBasic和VisualBasic.PowerPacks的引用

大卫


[使用VS2008 SP]

我遇到了完全相同的问题,像Joao一样,我最终发现它是由Windows窗体线型引起的。这会将Microsoft.VisualBasic.PowerPacks引用添加到您的项目中。当您在没有安装PowerPacks的系统上运行它时,您只会得到一个毫无帮助的system.IO.FileNotFoundException错误,而不知道丢失了哪个文件

是的,我知道这应该得到解决,如果你去做一个适当的发行设置,这将提示用户安装…等麻烦,但我只想能够简单地复制我的EXE到另一个系统

解决方法:从窗体中删除任何线型,然后删除引用中对VisualBasic和VisualBasic.PowerPacks的引用

大卫


[使用VS2008 SP]

没错。似乎缺少一个dll。我会尽力找出问题的,谢谢。没错。似乎缺少一个dll。我会尽力找出问题的,谢谢。只是想让大家知道,错误是因为我使用了Lin