我的项目中有一段代码,在某些情况下可以在IIS工作进程(在HttpHandler中)以及单独的Windows服务中运行。我编写了一个引用的程序集(DataVisualisation.dll),它由网站组件和Windows服务使用,网站和服务都有自己的DLL副本。
[A]DataVisualisation.ReportingTimePeriod cannot be cast to [B]DataVisualisation.ReportingTimePeriod. Type A originates from 'DataVisualisation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location 'C:\[project]\Actions\DataVisualisation.dll'. Type B originates from 'DataVisualisation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'c:\[project]\LCFW\lcscheduler\bin\Debug\DataVisualisation.dll'.
提供此功能的代码很简单:
ReportingTimePeriod rp = (ReportingTimePeriod)resultFromAnotherFunction;
在网站上运行时有趣的是,但在Windows服务中却没有。我无法弄清楚,我不确定提供什么信息来帮助其他人解决问题。我原本期望网站和服务使用他们自己的DataVisualisation.dll副本,因此相对自包含。不知何故,不同的进程似乎知道另一个DLL。
强命名将是我的第一个调用端口,可能会在GAC中安装DLL,但遗憾的是DataVisualisation.dll引用了一些我无法控制的DLL,这些DLL没有强名称/签名。
还有其他选择吗?我接近使用Reflection来查看我需要的属性是否存在并以这种方式访问它们,但如果我能避免它,我宁愿不这样做。
答案 0 :(得分:1)
我认为您的问题是您在每个项目中都重复了DataVisualisation代码吗?
即。 SolutionA位于C:\ SolutionA中,其中包含Website和DataVisualisation文件夹和代码。和SolutionB位于C:\ SolutionB中,其中包含Service和DataVisualisation文件夹和代码。即使两个解决方案中的DataVisualisation代码相同,实际的项目指南也会有所不同......
我能想到的另一件事是你在服务中的引用可能是DataVisualisation类的旧版本。而是确保两个解决方案都引用相同的项目(文件夹)。