当我尝试部署它时,我正在使用我的应用程序遇到错误,但仅限于某些情况:
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“但它没有区别;我是否需要在”configSections“部分添加”startup“?
<?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运行时缺失/错误版本的错误信息以及错误信息是如此误导,这似乎很奇怪。为什么错误的msg不能告诉你哪个.DLL或找不到的文件?这将使调试变得更加简单/快速。
答案 0 :(得分:1)
因为它是一个表单应用程序,添加它,看看你是否从错误中获得更多信息;您可能需要使用EventLog.CreateEventSource()
注册事件日志源 /// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
EventLog eLog = new EventLog("SomeLog", ".", "YourApp");
eLog.WriteEntry(UnrollException(e.Exception), EventLogEntryType.Error);
}
static string UnrollException(Exception ex)
{
StringBuilder sb = new StringBuilder();
sb.Append(ex.Message);
while (ex.InnerException != null)
{
ex = ex.InnerException;
sb.Append(Environment.NewLine);
sb.Append(ex.Message);
}
return sb.ToString();
}
编辑:免责声明 - 我实际上并没有运行此代码,所以它可能会抛出一些自己的例外:D
答案 1 :(得分:1)
根据您在上面发布的错误描述,我认为这根本与.NET框架无关;相反,这看起来是你的表单的构造函数抛出错误。这可以通过堆栈跟踪从duckbilledPlatypus.duckbilledPlatypusMainForm..ctor()
开始来支持。
尝试在构造函数中注释掉代码并查看应用程序是否运行。如果它确实运行,您可以更密切地调查导致未处理异常的代码。我的怀疑是,当InitializeComponent
运行导致此异常时,您可以对表单进行控制。