【问题标题】:.Net Runtime: FileNotFoundException Program.Main..cctor().Net 运行时:FileNotFoundException Program.Main..cctor()
【发布时间】:2017-08-24 15:15:53
【问题描述】:

我收到了这个FileNotFoundException 并且很好奇原因是什么。

.Net Runtime
---------------------------------------------------------------------
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name=".NET Runtime" /> 
  <EventID Qualifiers="0">1026</EventID> 
  <Level>2</Level> 
  <Task>0</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2017-08-24T14:45:09.382117400Z" /> 
  <EventRecordID>820</EventRecordID> 
  <Channel>Application</Channel> 
  <Computer>Sarah-VPC</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>Application: Jobfish.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.IO.FileLoadException at Jobfish.Program..cctor() Exception Info: System.TypeInitializationException at Jobfish.Program.Main(System.String[])</Data> 
  </EventData>
  </Event>

这里是事件查看器常规视图的片段。

Exception Info: System.IO.FileLoadException
   at Jobfish.Program..cctor()

Exception Info: System.TypeInitializationException
   at Jobfish.Program.Main(System.String[])

以下是详细信息:

在我的开发桌面上一切正常。我在我的 Windows 10 64 位 VirtualBox PC 上收到此错误消息。

我最后一次在 VirtualBox 环境中检查应用程序是使用 Windows 8.1 和 Visual Studio 2015。一切都很好。我更新到 VS2017 和 Windows 10(最新),我得到了上面的异常。

我从未在Program.Main() 入口点收到我的MessageBox.Show() 调试语句。

我查看了参考资料,它们看起来不错,但话又说回来,我们正在谈论 WinForm 应用程序的入口点,所以一开始就是这样。此外,错误在于 .NetRuntime。

目标是 4.5.1,Windows 10 附带 4.7。

我尝试在Programs and Features 控制面板小程序中从Add Windows Features 添加.Net Framework v2/3.5,不行。我还尝试为 VS2012、VS2015 和 VS2017 添加 VS C++ Runtime 64 和 X86,也没有成功。我在谷歌搜索中看到了推荐。

很明显,问题是 Windows 在 main() 和 Program.Main() 之间的空间中找不到东西,这是在启动代码中。

我确实“升级”了我的应用程序,所以可能是升级问题。我刚刚尝试了一个干净的新创建的 X64 WinForm 项目并且出现了,所以有些不同。

明显的前进方式是开始一次向干净的项目添加一些东西,然后看看什么时候出现问题。在两个项目文件之间也做同样的事情。

我希望有人可能知道一些事情,因为这个问题与 VS2015/Win81 到 VS2017Win10 相关。

有没有获取更多信息的好方法?事件查看器很好,但不是很有帮助。

我尝试复制 RemoteDebuger 文件并在 Virtual Box 上启动 Remote Debugger,但 VS2017 找不到远程系统,因此出现了一些 IP/VBx 问题。我尝试安装 .Net Framework 4.5,但被告知我已经拥有它。

Google 和 SO 的帖子似乎没有太大帮助,即使在查找 ..cctor() 时,虽然具体错误是 TypeInitializationException on 'System.String[]`,这是一个非常基本的 .Net 东西,所以几乎是问题在我看来,.Net 的适用版本没有安装,我有 4.7。哎呀,正如我所说,我尝试使用离线安装程序安装 4.5.1,但显然失败了,因为 4.7 包含早期版本的 4.X。

我对 4.5.1、4.5、4.0 和 2.0 运行了步骤 outlined,结果一切都很好。我对新安装的 Windows 也有同样的期望。

想法?

【问题讨论】:

  • 运行 fuslogvw.exe,如果它是 TypeInitializationException,我会怀疑由于某种原因没有加载程序集依赖项。
  • 你在主构造函数中加载了什么文件?它是否仍然存在于您的新虚拟盒子环境中?
  • @GhostTW 嗯。你说的对。主要的构造函数是什么抛出的东西,必须是。这是行:[STAThread]public static void Main(String[] args)。我的TypeInitializationException 在 String[] 上,我的构造函数有String[]。这可能就是新创建的项目很好的原因。谢谢你,另一个线索。
  • @code4life 我将文件复制到虚拟 PC 中,无论是从管理员命令提示符还是通过右键单击 run-as-admin 运行都没有任何反应。我什至尝试使用 /?和命令提示符下的 /help 选项,什么都没有。任务管理器和系统托盘也没有显示任何内容,因此可能存在对文件的依赖或fuglogvw.exe 运行的东西。

标签: c# .net winforms exception filenotfoundexception


【解决方案1】:

我在安装新服务时遇到了同样的问题,这似乎是由于 .Net 运行时或与 IO.FileLoadExceptionTypeInitializationException 的目录权限或服务用户权限有关:

问题实际上与这些无关。问题与我的服务试图用来写入日志的底层log4net.dll 的版本有关。该服务是使用较旧的Nuget 版本构建的。

我也有类似的服务在同一个盒子上运行而没有问题,因为它们是使用更高版本的 log4net.dll 构建的。

当我添加该dll 的更新版本时,问题解决了。

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2017-10-10
    • 2018-07-16
    相关资源
    最近更新 更多