从Windows服务引用项目

时间:2014-02-25 23:18:47

标签: c# .net asp.net-mvc visual-studio-2012 windows-services

我正在尝试使用C#和.NET框架编写我的第一个Windows服务,并且无法在服务中的同一解决方案中引用项目。我在VS2012中的MVC解决方案结构:

  1. 1个MVC项目(网络应用项目)
  2. 1个额外的处理项目(用于控制器内的扩展处理)
  3. 1个服务项目
  4. 1安装shield le项目(成功安装服务项目)
  5. 在我的服务中(我想每隔x分钟启动一次)我在扩展处理项目中引用了一些方法,当我在服务项目中编写代码时,智能感知能够检测到这些方法(我使用了一个扩展的处理项目;使用了webAppProject;和一个项目引用extendedProcessingProject和Web应用程序项目)。

    该服务安装到我的本地电脑没有错误。当我启动服务时,我记录了一个错误,我似乎无法弄明白:

    Exception body: ReminderEmailService Object reference not set to an instance of an     object.  System.Collections.ListDictionaryInternal  
     System.NullReferenceException: Object reference not set to an instance of an object.
       at ReminderEmailService.ReminderEmailService.ReminderEmails(Object source, ElapsedEventArgs e)
    
       at ReminderEmailService.ReminderEmailService.SendReminderEmails(Object source, ElapsedEventArgs e)
    

    Void SendReminderEmails(System.Object,System.Timers.ElapsedEventArgs)

    我知道可以看到使用System.Diagnostics.Debugger.Launch();

    List<SessionReminder> sessions = Queries.GetSessionsToRemind();                    
    //sessions does not have a value, method returns a list of 1
    //I suspect this is a project reference issue
    debugString += "sessions: \n" + sessions.ToString(); 
    //exception thrown on this line--I suspect because sessions is null
    

    我在我的解决方案中的所有项目上使用.NET4.0(不是客户端配置文件)。任何有关如何使我的Windows服务正确访问这些程序集(webappproject.dll和extendedProcessing.dll)的见解将非常感激,因为这些dll是由安装盾安装的。

2 个答案:

答案 0 :(得分:1)

它可能不是实际的程序集引用问题。您看到的错误是运行时抱怨访问null对象的方法/字段/属性。这表示您的代码正在访问未初始化的对象。

答案 1 :(得分:1)

您显示的异常看起来不像引用程序集的问题。它看起来像代码中的普通普通bug,而不是缺少的程序集。

我总是为Windows服务创建测试工具,使我能够将服务作为简单的Windows窗体应用程序运行,以便于调试。

使用实际的Windows服务将您的服务实现分离到程序集中的单独程序集。使用简单的开始/停止按钮创建另一个项目WPF / Winforms。从windows服务和winforms应用程序引用包含在您的服务中运行的功能的程序集。