我在尝试部署应用程序时遇到了上述错误,但仅在某些情况下:
- 在 VS IDE 中:没问题,我的应用运行良好
- 在 Windows 资源管理器中双击我的 .exe:没问题,我的应用程序运行良好
- 在 Windows 资源管理器中右键单击我的 .exe 并选择“运行方式”:我收到上面的错误,它不会运行
- 在已部署 .exe 的远程计算机上的 Windows 资源管理器中右键单击我的 .exe,然后选择“运行方式”:我收到上述错误,它不会运行
- 在已部署 .exe 的远程计算机上双击 .exe 的桌面链接/快捷方式:非常模糊的错误消息,我的应用程序将无法运行。
Windows 事件日志中的信息(在场景 3 失败后)是:
Type: Error
Source: .NET Runtime
Message: Application: duckbilledPlatypus.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.TypeInitializationException
Stack: at duckbilledPlatypus.duckbilledPlatypusMainForm..ctor()
at duckbilledPlatypus.Program.Main()
我四处游荡,寻找和尝试不同的东西,抓住稻草。这是一个:
我的 App.config 文件(如下)的布局有问题吗?
注意:我刚刚添加了“supportedRuntime version="v4.0.30319" 但没有任何区别;我需要将“startup”添加到“configSections”部分吗?
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net"/>
</configSections>
<log4net>
<appender name="ConsoleAppender"
type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ISO8601} [%thread]
%-5level %-50.50logger | %message%newline"/>
</layout>
</appender>
<appender name="DebugAppender"
type="log4net.Appender.DebugAppender">
<immediateFlush value="true"/>
<layout type="log4net.Layout.SimpleLayout"/>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="ConsoleAppender"/>
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v4.0.30319" />
</startup>
</configuration>
注意:我安装了以下 .NET 版本:1.0.3705;1.1.4322;2.0.50727;3.0;3.5;和 4.0.30319
我在其计算机上部署了我的应用程序的用户也是如此......
如果我将启动更改为:
<startup>
<supportedRuntime version="v4.0.30319"
sku=".NETFramework,Version=v4.0.30319" />
</startup>
我得到(即使在 IDE 中),“要运行此应用程序,您首先必须安装以下 .NET Framework 版本之一:.NETFramework,Version=4.0.30319 您想下载并安装 .NETFramework,Version- v4.0.30319 现在? ”
但是,如果我只是使用它:
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
它在 IDE 中运行良好......但我仍然有所有有问题的其他场景(主要是它不会在部署位置运行)......???
更新
作为对 Charleh 的回答,主窗体的构造函数中唯一的内容是:
InitializeComponent();
foreach (string arg in Environment.GetCommandLineArgs()) {
if (arg == "-DEBUG") {
InDebugMode = true;
break;
}
}
tsch = new ToolStripControlHost(dateTimePickerDuckbilledPlatypus);
toolStripDuckbilledPlatypusMain.Items.Add(tsch);
再次更新
我刚刚尝试从 App.config 中完全删除以下内容:
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
……但这没什么区别。
再次更新
似乎一旦我复制了一个它需要访问的文件(一个 .txt 文件),它就运行良好(它这样做了一次)。但是现在又回到了不想再打开的状态,事件日志数据是:
Source: .NET Runtime
Message: Application: duckbilledPlatypus.exe Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileLoadException
Stack: at duckbilledPlatypus.duckbilledPlatypusMainForm.InitializeComponent()
at duckbilledPlatypus.duckbilledPlatypusMainForm..ctor() at duckbilledPlatypus.Program.Main()
如果不止一个人访问 .exe 或 .txt,会不会出现这个问题?
最后一次更新,我认为
结果是,首先我未能复制几个 .dll 和 .exe 所需的文本文件。一旦那些在那里,它运行良好。尽管如此,在我看来,右键单击该文件会给出关于 .NET 运行时版本缺失/错误的虚假 err msg 并且 err msg 具有误导性,这对我来说似乎很奇怪。为什么 err msg 不能告诉您未找到哪个 .DLL 或文件?这将使调试变得更简单/更快。