0

У меня есть служба 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 в проект и поместил всю логику из службы в него и смог запустить его без каких-либо проблем.

+0

Похоже, что существует некоторая проблема с DLL, содержащая 'MasterDBContext' (т.е. что-то вроде старой версии в каталоге, где вы запускаете проект) –

+0

Я очистил все библиотеки DLL в каталогах bin и obj (включая папки Debug и Release), очистил решение и перестроил его. Когда я удалю службу, я убеждаюсь, что каталог, в котором он был запущен, полностью удален, и ничего не осталось. – Robert

+0

Попробуйте добавить статический фиктивный метод к классу «MasterDbContext» (или что-нибудь в его сборке/dll) и вызвать его, прежде чем вы перейдете к описываемому вами коду. Это также взорвало MissingMethodException? Если это так, это все еще похоже на проблему с версией, если нет, то она по крайней мере полностью исключена. –

ответ

0

Оказывается, что Иоахим был на что-то. Dll была более старой ссылкой, но не случайно, но больше ошибок в InstallShield LE, встроенной в VS2012. Мой проект ссылался на правильную dll, и когда я строил проект установки, я обязательно выбрал вывод для своего проекта, но когда он строился, он ссылался на более старую версию этой DLL. Независимо от того, сколько раз я удалял проект установки и воссоздавал его, он всегда сохранял эту старую ссылку. Я закончил полностью удаление проекта, который создал DLL и воссоздал его с другим именем, а затем InstallShield взял правильную DLL, и она сработала.

Надеюсь, это поможет кому-то еще!

Смежные вопросы