Windows Service中出现“找不到方法”错误

时间:2013-07-25 18:20:18

标签: c# visual-studio-2012 windows-services entity-framework-5

我有一个使用VS2012和4.5 Framework用C#编写的Windows服务。我的服务包括两个基本上是我的数据库对象的其他项目,但它们使用.edmx文件和EF5。

EDMX项目:
MyCompany.Data.MasterDB
MyCompany.Data.StatsTracker

该服务对其内部的方法进行2次调用; 1生成要处理的文件列表,如果大于0,则返回true,否则返回false ....另一种方法实际处理这些文件。

//Only proceed if there are files to process.
if (GenerateFileList())
    ProcessLogs();

第二种方法(称为ProcessLogs)是我尝试使用其他项目中的Context的地方,也是我收到以下错误的地方:

Method not found: 'System.Data.Entity.DbSet1<MyCompany.Data.MasterDB.StatisticLogType>MyCompany.Data.MasterDB.MasterDBContext.get_StatisticLogTypes()'.

以下是ProcessLogs方法的几行(包含在Try / Catch中):

StatisticLogType duplicatesLogType;
StatisticLogType successLogType;
MasterDBContext scContext = new MasterDBContext();
StatsTrackerContext utContext = new StatsTrackerContext();

//I believe this is where the error is coming from:
successLogType = scContext.StatisticLogTypes
                                .Where(s => s.StatisticLogTypeID == (int)StatisticLogTypes.LogTypes.Success).FirstOrDefault<StatisticLogType>();

duplicatesLogType = scContext.StatisticLogTypes
                                    .Where(s => s.StatisticLogTypeID == (int)StatisticLogTypes.LogTypes.Duplicates).FirstOrDefault<StatisticLogType>();

StatisticLogTypes.LogTypes是驻留在MasterDB对象中的静态枚举类:

public static class StatisticLogTypes
{
    public enum LogTypes
    {
        CorruptFile = 1,
        Success = 2,
        Duplicates = 3,
        LocationNotFound = 4,
        SystemNotFound = 5,
        BadFileNameFormat = 6,
        Uploaded = 7,
        FileNotFound = 8,
        InvalidFileExtension = 9
    }
}

抱歉,它有点分散,但我不想留下任何东西.....所以项目编译和构建成功,我甚至可以使用InstallShield Lite安装它就好了。当我运行它并将VS调试器附加到它时,我看到它通过GenerateFileList()方法就好了,但是当我尝试遍历ProcessLogs()时,我得到了那个错误。它实际上并没有让我逐行逐步执行ProcessLogs()方法,我发现这很奇怪。

无论如何,我已经做了大量的研究,试图找出问题,但似乎找不到任何东西。我已经确保我的所有项目都在相同的.NET Framework版本上,但这没有帮助。

任何帮助或方向都会很棒。这让我很难过,而且我一直在努力寻找解决方案。

顺便说一句,我想补充一点,我在项目中添加了一个TestUnit,并将服务中的所有逻辑放入其中,并且能够毫无问题地运行它。

1 个答案:

答案 0 :(得分:0)

原来,约阿希姆正在做点什么。这个dll是一个较旧的参考,但不是偶然的,而是VS2012中内置的InstallShield LE的更多错误。我的项目引用了正确的dll,当我构建安装项目时,我确保为我的项目选择输出,但是在构建时,它引用了该DLL的旧版本。无论我删除了多少次安装项目并重新创建它,它始终保留较旧的引用。我最终完全删除了创建DLL的项目并使用不同的名称重新创建它,然后InstallShield选择了正确的dll并且它工作正常。

希望这有助于其他人!