У меня есть служба Windows, написанная на C# с использованием VS2012 и 4.5 Framework. Моя служба состоит из 2 других проектов, которые в основном являются объектами для моих баз данных, но они используют файлы .edmx и EF5.Ошибка «Метод не найден» с помощью службы Windows
EDMX Проекты:
MyCompany.Data.MasterDB
MyCompany.Data.StatsTracker
Услуга делает 2 вызовы методов внутри себя; 1 генерирует список файлов для обработки, и если число больше 0, оно возвращает true, в противном случае false .... и другой метод фактически обрабатывает эти файлы.
//Only proceed if there are files to process.
if (GenerateFileList())
ProcessLogs();
2-й метод (называемый ProcessLogs
) то, где я пытаюсь использовать контекст из других проектов, и где я получаю следующее сообщение об ошибке:
Method not found: 'System.Data.Entity.DbSet1<MyCompany.Data.MasterDB.StatisticLogType>MyCompany.Data.MasterDB.MasterDBContext.get_StatisticLogTypes()'.
Вот несколько строк метода ProcessLogs
(это завернутый в Try/улов):
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, но это не помогло.
Любая помощь или направление были бы замечательными. Это меня насторожило, и я пытался найти решение в течение нескольких дней.
BTW, я хотел добавить, что я добавил TestUnit в проект и поместил всю логику из службы в него и смог запустить его без каких-либо проблем.
Похоже, что существует некоторая проблема с DLL, содержащая 'MasterDBContext' (т.е. что-то вроде старой версии в каталоге, где вы запускаете проект) –
Я очистил все библиотеки DLL в каталогах bin и obj (включая папки Debug и Release), очистил решение и перестроил его. Когда я удалю службу, я убеждаюсь, что каталог, в котором он был запущен, полностью удален, и ничего не осталось. – Robert
Попробуйте добавить статический фиктивный метод к классу «MasterDbContext» (или что-нибудь в его сборке/dll) и вызвать его, прежде чем вы перейдете к описываемому вами коду. Это также взорвало MissingMethodException? Если это так, это все еще похоже на проблему с версией, если нет, то она по крайней мере полностью исключена. –