【问题标题】:.NET 4.0 application throws exception on a machine without Visual Studio.NET 4.0 应用程序在没有 Visual Studio 的机器上引发异常
【发布时间】:2011-06-14 18:17:20
【问题描述】:

我的应用程序在此处安装了 Visual Studio 的所有计算机上都运行良好,但在没有 Visual Studio 的计算机上无法运行。

应用程序只是在启动时崩溃,并在事件查看器中显示此消息:

Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.TypeInitializationException
Stack:
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(System.String[])
at IssueTrackingSystem.My.MyApplication.Main(System.String[])

我用一个按钮测试了一个简单的应用程序,结果相同。

更新:

【问题讨论】:

  • 目标机器是否安装了.NET 4?
  • 添加catch 块并检查InnerException
  • 此外,如果您的应用程序需要,请确保目标计算机具有完整的 .NET 4,而不仅仅是“.NET 4 客户端配置文件”。
  • 如何将应用部署到没有VS的机器上?

标签: .net vb.net visual-studio visual-studio-2010


【解决方案1】:

您需要获取异常的 InnerException 才能真正知道出了什么问题。项目 + 属性,应用程序选项卡,单击查看应用程序事件按钮。在编辑器窗口上方的左上组合框中选择“(MyApplication Events)”,在右侧组合框中选择“启动”。

这会添加 Startup 事件处理程序。让它看起来像这样:

    Private Sub MyApplication_Startup(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf KaboomHandler
    End Sub

    Private Sub KaboomHandler(sender As Object, e As UnhandledExceptionEventArgs)
        MsgBox(e.ExceptionObject.ToString())
        Environment.Exit(1)
    End Sub

您现在将获得包含内部异常的堆栈跟踪。这应该足以找到炸弹的静态构造函数。如果这没有帮助,请发布您在问题中看到的堆栈跟踪。

【讨论】:

  • 在我看来,您没有部署正确版本的 DevExpress 组件。
【解决方案2】:

当任何类型的构造函数抛出未正确捕获和处理的异常时,将抛出System.TypeInitializationException。字段的静态初始化也会抛出这个异常。您将需要确定它是哪种类型并进行相应的调试。正如其他发帖人所说,很可能您没有在目标机器上配置/部署任何东西。

我在尝试访问不存在的配置文件条目、库不存在等时看到了这种情况。直到你得到详细的异常(你应该能够检查内部异常),它将更难缩小范围。

更新:

按照错误消息中的文章建议,在您的 app.config 中尝试此操作:

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

【讨论】:

    【解决方案3】:

    您应该检查客户端计算机上安装的 .NET 版本。
    还要检查所有引用的程序集,如果有异常,将它们添加到.bin 文件夹中

    【讨论】:

      【解决方案4】:

      您应确保正确部署 DevXpress 程序集。 此外,错误消息指示您检查http://msdn.microsoft.com/en-us/library/ee191568(VS.100).aspx。这是你做的吗?

      【讨论】:

      • 是的,我做到了。我按照说明进行操作,但没有帮助。
      【解决方案5】:

      我之前发布了这个in this SO question,我将把它链接到这里,因为它出现在我的 Google 搜索结果中。

      总结一下:

      事实证明,对于目标框架为 .NET 4.0 或 .NET 4.0 CP 的项目,有一些 .NET 4.5 中不存在的 DLL,在我的项目中是 Visual Basic DLL。

      我的项目是一个升级到 Visual Basic .NET (VB.net) 的 Visual Basic (VB6) 项目,它不知何故需要名为 Microsoft.VisualBasic.PowerPacks.Vs.dll 的 DLL,位于

      C:\Program Files\Reference Assemblies\Microsoft\VBPowerPacks\v10.0

      将文件打包到安装程序中的 InstallShield 项目也无法检测到这种依赖关系。

      我只是在意识到项目在安装 Visual Studio 的情况下运行良好后才发现这一点,但在崩溃日志中除了“System.IOException.FileNotFound”之外没有任何特定警告而崩溃。

      【讨论】:

        猜你喜欢
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        相关资源
        最近更新 更多