我有第三方工作流软件(Captaris ),它引用来自我的项目的程序集,该程序集通过GAC从我们的项目解决方案中引用其他程序集。
当我们的应用程序执行时,它调用Captaris Teamplate方法来创建工作流流程,该流程反过来使用GAC中的项目程序集将数据存储到数据库中。
问题是,当我编译我的项目并从GAC中删除程序集时,用新版本替换它们,但是当我运行整个项目时,Captaris Teamplate抛出一个错误:
异常类型: System.IO.FileNotFoundException 消息:找不到文件或程序集名称VBAssembly或其依赖项之一。 FileName: VBAssembly FusionLog:===预绑定状态信息=== 日志: DisplayName = VBAssembly,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null
也就是说,它不会给我程序集DLL文件的名称。它想找的也不是它想要的版本。对此类问题进行故障排除就像在黑暗中射击一样,它可以删除保存在ASP.NET临时文件文件夹、项目文件夹和网站文件夹(inetpub)中的旧程序集、重新启动等、测试错误、获取错误、搜索其他旧程序集等。
所以我的问题是:
我们使用的是ASP.NET版本1.1和VisualStudio2003CaptarisWorkflow 5.0。
发布于 2008-11-26 15:57:06
如果可能的话,避开GAC。它把自己借给DLL地狱。VBAssembly可能实际上是非托管的,并且可能已经从WINDOWS/system32目录中删除。
发布于 2008-11-26 16:03:35
您可以做的另一件事是通过web.config“强制”引用所需程序集的版本。下面是我在我的web.config中的一个示例,以确保我在我的web应用程序中访问了水晶报告的正确版本……
<assemblies>
<add assembly="CrystalDecisions.Web, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.Shared, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.Enterprise.Framework, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
</assemblies>我相信您可以做同样的事情来引用您的库,您只需要确保它们有一个强大的命名键,以便有一个可引用的PublicKeyToken。
发布于 2008-11-26 16:09:39
也许您可以创建一个绑定策略,将对从XXX移除的程序集的任何请求重定向到GAC到新位置。见http://msdn.microsoft.com/en-us/library/aa309359(VS.71).aspx)。
https://stackoverflow.com/questions/320719
复制相似问题