Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务出现“找不到方法”错误_C#_Visual Studio 2012_Windows Services_Entity Framework 5 - Fatal编程技术网

C# Windows服务出现“找不到方法”错误

C# Windows服务出现“找不到方法”错误,c#,visual-studio-2012,windows-services,entity-framework-5,C#,Visual Studio 2012,Windows Services,Entity Framework 5,我有一个使用VS2012和4.5框架用C编写的windows服务。我的服务由另外两个项目组成,它们基本上是我数据库的对象,但它们使用.edmx文件和EF5 EDMX项目: MyCompany.Data.MasterDB MyCompany.Data.StatsTracker 该服务对自身内的方法进行2次调用;1生成要处理的文件列表,如果文件超过0,则返回true,否则返回false。。。。另一种方法实际处理这些文件 //Only proceed if there are files to pro

我有一个使用VS2012和4.5框架用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的方法是我尝试使用来自其他项目的上下文的方法,这是我得到以下错误的地方:

找不到方法:“System.Data.Entity.DbSet1MyCompany.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>();
抱歉,它有点分散,但我尽量不遗漏任何内容……因此项目编译和构建成功,我甚至可以使用InstallShield Lite安装它。当我运行它并将VS调试器附加到它时,我看到它很好地通过了GenerateFileList方法,但是当我尝试遍历ProcessLogs时,我得到了那个错误。实际上,它不允许我逐行遍历ProcessLogs方法,我觉得这很奇怪

无论如何,我已经做了大量的研究试图找出这个问题,但似乎什么也找不到。我已经确保我所有的项目都在同一个.NETFramework版本上,但这没有帮助

任何帮助或指导都会很好。这件事让我感到困惑,几天来我一直在努力寻找解决办法


顺便说一句,我想补充的是,我在项目中添加了一个测试单元,并将服务中的所有逻辑都放入其中,并且能够在没有任何问题的情况下运行它。

结果表明,Joachim发现了一些问题。dll是一个较旧的参考,但不是偶然的,而是VS2012内置的InstallShield LE的更多错误。我的项目引用的是正确的dll,当我构建安装项目时,我确保为我的项目选择输出,但在构建项目时,它引用的是该dll的旧版本。无论我删除安装项目并重新创建它多少次,它始终保留旧的引用。我最终完全删除了创建DLL的项目,并用另一个名称重新创建了它,然后InstallShield选择了正确的DLL,它成功了


希望这对其他人有帮助

听起来包含MasterDBContext的DLL有一些问题,比如运行项目的目录中有一个旧版本。我已经清除了bin和obj目录中的所有DLL,包括调试和发布文件夹,清理了解决方案并重建了它。卸载该服务时,我会确保运行该服务的目录已完全删除,并且没有留下任何内容。请尝试向MasterDbContext类或其assembly/dll中的任何内容添加静态虚拟方法,并在获取所描述的代码之前调用它。这是否也会引发MissingMethodException?如果是的话,它看起来仍然像是一个版本控制问题,如果不是,它至少已经被完全排除。
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
    }
}