C# Windows服务启动失败,混合模式程序集问题

C# Windows服务启动失败,混合模式程序集问题,c#,.net,windows-services,mixed-mode,app-startup,C#,.net,Windows Services,Mixed Mode,App Startup,我这里有一个独特的案例 经过大量的试验和谷歌搜索,我还不能解决这个问题 我有一组运行时版本为“v2.0.50727”的库(第三方),我必须在我的WINDOWS服务应用程序中使用这些库(这里是键“WINDOWS服务”),它需要.Net v4.0(v4.0.30319) 我已经成功地解决了各地描述的混合模式组装错误 这里最丰富的解决方案来源之一: 安装后的服务无法启动。(引发通用超时异常。) 事件查看器中的详细信息(在windows日志>应用程序下)指定 2来源 .Net运行时(详细信息如下) 应

我这里有一个独特的案例

经过大量的试验和谷歌搜索,我还不能解决这个问题

我有一组运行时版本为“v2.0.50727”的库(第三方),我必须在我的WINDOWS服务应用程序中使用这些库(这里是键“WINDOWS服务”),它需要.Net v4.0(v4.0.30319)

我已经成功地解决了各地描述的混合模式组装错误

这里最丰富的解决方案来源之一:

安装后的服务无法启动。(引发通用超时异常。)

事件查看器中的详细信息(在windows日志>应用程序下)指定 2来源

  • .Net运行时(详细信息如下)

    应用程序:MyWindowsService.exe 框架版本:v4.0.30319 描述:由于未处理的异常,进程已终止。 异常信息:System.Configuration.ConfigurationErrorsException 堆栈: 位于System.Configuration.ClientConfigurationSystem.EnsureInit(System.String) 位于System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(System.String) 位于System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IIInternalConfigSystem.GetSection(System.String) 在System.Configuration.ConfigurationManager.get_AppSettings()中 在MyWindowsService..ctor()上 在MyWindowsService.Program.Main()上

  • 应用程序错误:(详细信息如下)
  • 出现故障的应用程序名称:MyWindowsService.exe,版本:1.0.0.0,时间戳:0x53da4547 故障模块名称:KERNELBASE.dll,版本:6.1.7601.18409,时间戳:0x53159a86 异常代码:0xe0434352 故障偏移量:0x0000c42d 出错进程id:0x3814 故障应用程序启动时间:0x01cfacc646c337dc 出现故障的应用程序路径:c:\Src\bin\MyWindowsService.exe 故障模块路径:C:\Windows\syswow64\KERNELBASE.dll 报告Id:8d72e05a-18b9-11e4-a80e-689423ef1889

    这里重要的一点是,如果我从app.config中删除此配置,服务将正确启动(显然在运行时中断,因为存在混合模式程序集),而将其保留在配置中不会让它启动

    请在这方面指导我。 任何帮助都将不胜感激

    附言: 1.到目前为止,我已经尝试了上面stackoverflow链接中指定的所有建议

    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/> </startup>
    
    
    
  • 使用VS 2012、.Net Framework 4.0、windows 7

  • 确定服务未启动原因的一个选项是将调试器连接到服务

    由于调试服务需要:

  • 从服务控制管理器启动服务
  • 使用VS中的调试“附加到进程”选项
  • 由于要连接到OnStart方法,因此需要添加
    Thread.Sleep(5000)
    在从服务控制管理器启动服务后,给自己5秒钟的时间将调试器连接到服务。在sleep语句之后设置断点

    如果您是.NET运行时错误,您可能永远无法到达断点,因为加载时似乎有问题

    您是否尝试创建一个简单的应用程序,使用相同的第三方库来验证app.config文件的正确设置

    尝试使用以下方法:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" />
      <supportedRuntime version="v2.0.50727" />
     </startup>
    </configuration>
    
    
    

    我发现这个信息

    很怀疑导致程序崩溃的异常是否与
    元素有关。它对您的应用程序设置不满意,但没有一条合适的异常消息说明原因。在Main()方法中订阅AppDomain.CurrentDomain.UnhandledException事件,以便获得更好的报告。看起来你已经在这样做了,它需要改进。@HansPassant:我试过你的建议,但没有更好的办法。我试过调试服务,bt无法调试,服务超时还是发生了(尽管我让线程休眠了)。是的,我确实尝试过从一个简单的应用程序调用相同的服务方法,它在指定的配置条目下运行良好。我也试过很多这样的。。。工作正常-解决混合模式错误。但是在app.config中指定了此条目后,服务不会启动。谢谢你的帮助。
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" />
      <supportedRuntime version="v2.0.50727" />
     </startup>
    </configuration>