为什么使用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
答案 0 :(得分:3)
system.io.filenotfoundexception
通常意味着您的程序试图打开不存在的文件。您的程序可能正在尝试使用不存在或位于其他计算机上的其他位置的路径或文件名来访问某些文件。在不知道myapp.exe
应该做什么的情况下,我无法再回答。
您的解决方案可能是重新编写您的应用程序,以便以某种方式更好地处理该异常,例如在尝试打开文件之前检查文件是否存在。
答案 1 :(得分:2)
听起来像是一个缺少参考的案例。检查解决方案资源管理器中的引用或进入bin / debug或bin / release(取决于您的配置)并确保复制项目所依赖的所有dll或exes
答案 2 :(得分:0)
该应用最有可能尝试加载程序集并且无法找到它
有点偏离主题,但理想情况下,您希望添加一些“未处理”异常处理以写入日志文件或事件日志,以便您可以捕获更多异常堆栈。
通常,您只会收到最后一条异常消息,而且您也看不到调用堆栈
您可以使用以下内容轻松汇总异常:
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
类写入事件日志。
信息在这里:
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx
查看示例 - 记得先注册一个事件源!
答案 3 :(得分:0)
看起来你的程序缺少一个DLL(或DLL被错放):
http://social.msdn.microsoft.com/Forums/pl-PL/clr/thread/782217a8-46bd-4371-9915-28655d9b2c2f
Deciphering the .NET clr20r3 exception parameters P1..P10
一个简单的方法是创建一个安装项目 - 然后将项目的依赖项捆绑到一个安装文件中。如果您使用的是Visual Studio Express版本,我认为该选项不可用。 。
如果你非常确定它是一个缺少的.net框架,下面的工具会告诉你机器/你的客户端上有什么,所以你可以找出缺少的东西:
http://www.asoft.be/prod_netver.html
希望有所帮助。
答案 4 :(得分:0)
我有完全相同的问题,像Joao最终发现它是由Windows Forms LineShape引起的。这会将Microsoft.VisualBasic.PowerPacks引用添加到项目中。当您在没有安装PowerPacks的系统上运行它时,您只能获得无助的System.IO.FileNotFoundException错误,而不知道哪个文件丢失。
是的我知道这应该得到解决,如果你去做一个正确的分发设置的麻烦,这将提示用户安装......等等。但我只想简单地将我的EXE复制到另一个系统。
要解决:从表单中删除任何LineShapes,然后删除引用中VisualBasic和VisualBasic.PowerPacks的引用。
大卫
[使用VS2008 SP]