c#.NET应用程序在3台机器中的1台机器上启动时崩溃,System.IO.FileNotFoundException

c#.NET应用程序在3台机器中的1台机器上启动时崩溃,System.IO.FileNotFoundException,c#,.net-4.0,filenotfoundexception,C#,.net 4.0,Filenotfoundexception,我正在用Visual Studio 2010用C#编写一个应用程序,我的应用程序工程即将结束。对于测试,我使用3种不同的机器: 机器A:工作站PC(英特尔CPU,Win 7 64位.NET 4.0) 机器B:专用PC(英特尔CPU,Win7 64位,.NET 4.0) 机器C:人工PC(AMD64,Win7 64位,.NET 4.0) 我想要一个独立的.exe文件作为最终版本。无论我是在解决方案文件夹中运行应用程序,还是将其复制到任何目录并在那里运行,该应用程序在机器a和B上都像一个魔咒一样工作

我正在用Visual Studio 2010用C#编写一个应用程序,我的应用程序工程即将结束。对于测试,我使用3种不同的机器:

机器A:
工作站PC(英特尔CPU,Win 7 64位.NET 4.0)

机器B:
专用PC(英特尔CPU,Win7 64位,.NET 4.0)

机器C:
人工PC(AMD64,Win7 64位,.NET 4.0)

我想要一个独立的.exe文件作为最终版本。无论我是在解决方案文件夹中运行应用程序,还是将其复制到任何目录并在那里运行,该应用程序在机器a和B上都像一个魔咒一样工作。它总是起作用(它应该起作用)。但是机器C在应用程序启动时直接抛出一个错误,并输出一个“…
WERInternalMetadata.xml
”-文件,该文件显示“
System.IO.FileNotFoundException
”:

CLR20r3
myapp.exe
1.0.0.0
53318d78
测试报告员
1.0.0.0
53318d78
5d
F
System.IO.FileNotFoundException

但是,当我在包含*.dll文件的解决方案文件夹(例如…myapp\bin\x64\Debug)中启动该应用程序时,该应用程序工作正常,没有任何问题。 这是否意味着程序在根目录中搜索其依赖项

我已经检查了代码中的引用。此外,如果引用有任何问题,应用程序将不会在机器B上运行

我觉得奇怪的是,无论我把.exe放在哪里,机器A和B都能毫无问题地运行程序,但机器C只有在放在特定路径时才能正确运行我的应用程序

也许处理器在那里扮演了一个角色?有没有办法解决这个问题

顺便说一句: 如何生成已包含应用程序所需的所有依赖项和库的.exe文件。可以说是一个独立的exe


非常感谢

看起来EXE能够在机器A和B的GAC中找到必要的DLL,但在机器C中找不到。因此,只有特定的路径在工作

请检查GAC


另外,要将DLL嵌入EXE,请参阅此SO线程:

我发现了一个主题类似的线程,从而找到了解决方案:

我也在使用电源组。当我从解决方案目录中删除“Microsoft.VisualBasic.PowerPacks.Vs.dll”并启动应用程序时,我的程序失败,出现了描述的错误。复制回,然后再次启动应用程序成功。所以我想我的目标机器(机器C)需要安装电源组

所以我想我可以用4种方法解决这个问题:

1.)将“Microsoft.VisualBasic.PowerPacks.Vs.dll”与.exe放在同一文件夹中,然后启动我的应用程序

2.)安装电源组

3.)将PowerPack.dll手动安装到GAC。或者使用此处所述的相应工具将其提交给GAC

4.)将.dll直接嵌入到.exe中

我说得对吗


非常感谢你的帮助

我也有这个问题,Windows->Application日志中有类似的条目,包括FileNotFoundException。非常失望的是,每一条应用程序日志线索都只是一个兔子洞(缺少关于哪个文件的具体信息)。 我最终通过Procmon.exe发现了我的坏方法的错误,并扫描了结果列中标记为“未找到”的每一行。作为项目的一部分生成了一个附带的DLL,我忘了复制到目标机器上。 如果Procmon.exe消失了,我就死定了。自从1998年我开始使用VisualStudio以来,它已经帮助解决了90%的细微问题。
给我自己一个“今日白痴”奖…

这三台机器的用户都是管理员,还是失败机器的用户可能不是管理员?是的,所有用户都以管理员身份登录。所有计算机都运行SP1。是的,你可能是对的。见下面我的答案。我想我应该检查一下GAC。这让我找到了解决方案:详细答案如下尽快。。。。