1

我的项目中有一段代码,在某些情况下,它可以在 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,它们没有被强命名/签名。

还有其他选择吗?我接近使用反射来查看我需要的属性是否存在并以这种方式访问​​它们,但如果我可以避免它,我宁愿不这样做。

4

1 回答 1

1

我认为您的问题是您在每个项目中都重复了 DataVisualisation 代码?

即SolutionA 位于C:\SolutionA 中,其中包含Website 和DataVisualisation 文件夹和代码。SolutionB 位于 C:\SolutionB 中,Service 和 DataVisualisation 文件夹和代码位于其下。即使 DataVisualisation 代码在 2 个解决方案中是相同的,实际的项目 guid 也会有所不同......

我唯一能想到的另一件事是,您在服务中的引用可能是旧版本的 DataVisualisation 类。而是确保两个解决方案都引用同一个项目(文件夹)。

于 2012-10-29T10:24:46.723 回答