我的项目中有一段代码,在某些情况下,它可以在 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,它们没有被强命名/签名。
还有其他选择吗?我接近使用反射来查看我需要的属性是否存在并以这种方式访问它们,但如果我可以避免它,我宁愿不这样做。