我有一个使用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,并将服务中的所有逻辑放入其中,并且能够毫无问题地运行它。答案 0 :(得分:0)
原来,约阿希姆正在做点什么。这个dll是一个较旧的参考,但不是偶然的,而是VS2012中内置的InstallShield LE的更多错误。我的项目引用了正确的dll,当我构建安装项目时,我确保为我的项目选择输出,但是在构建时,它引用了该DLL的旧版本。无论我删除了多少次安装项目并重新创建它,它始终保留较旧的引用。我最终完全删除了创建DLL的项目并使用不同的名称重新创建它,然后InstallShield选择了正确的dll并且它工作正常。
希望这有助于其他人!