我正在尝试使用C#和.NET框架编写我的第一个Windows服务,并且无法在服务中的同一解决方案中引用项目。我在VS2012中的MVC解决方案结构:
在我的服务中(我想每隔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是由安装盾安装的。
答案 0 :(得分:1)
它可能不是实际的程序集引用问题。您看到的错误是运行时抱怨访问null对象的方法/字段/属性。这表示您的代码正在访问未初始化的对象。
答案 1 :(得分:1)
您显示的异常看起来不像引用程序集的问题。它看起来像代码中的普通普通bug,而不是缺少的程序集。
我总是为Windows服务创建测试工具,使我能够将服务作为简单的Windows窗体应用程序运行,以便于调试。
使用实际的Windows服务将您的服务实现分离到程序集中的单独程序集。使用简单的开始/停止按钮创建另一个项目WPF / Winforms。从windows服务和winforms应用程序引用包含在您的服务中运行的功能的程序集。