【发布时间】:2018-11-25 02:55:20
【问题描述】:
我在 Visual Studio 2003 中有一个旧项目,它是过去由其他开发人员制作的。
此项目添加了一些参考。其中之一,假设是 myDLL.dll。它在VS中具有以下属性:
- 复制本地 = True
- 运行时版本 v1.1.4322
- 强名称:真
- 类型:装配体
- 版本:2.1.1.30200
我构建解决方案并将其复制到生产机器的目标路径中。 在target中我已经确保myDLL.dll和VS方案中的版本相同,即2.1.1.30200。
当我在生产机器上执行新版本的应用程序时,我的应用程序日志中会显示以下错误:
名称为“myDLL”的已定位程序集的清单定义不 匹配程序集引用。
我猜在 GAC 中加载/安装了此 DLL 的先前版本,因此出现上述异常。
所以,我想知道 GAC 是否会不时(定期)自动清理,还是我需要手动删除旧的 DLL 并安装新的?
如果我需要在生产机器上移除旧的并安装新的,我该怎么做?
此外,如果我在生产机器中转到 C:\Windows\assembly,我可以找到 DLL myDLL,但显示的版本是 2.1.0.0 而不是 2.1.x.x。为什么?不应该是2.1.1.30200(新的)还是2.1.1.20100(旧的)?
我在这里阅读了很多帖子,如下所示:
- DLL version mismatch
- Working with GAC
- Installing DLL in GAC
- Viewing DLL in GAC
- Removing DLL from GAC
- What is GAC?
我发现的其他有趣的链接:
- .NET 4 gacutil on production server
- Automatically GAC an assembly after a build and include debug info.
但我是 GAC 的新手。
【问题讨论】:
-
使用fuslogvw 或Process Monitor 找出实际加载的DLL 并告诉我们。
-
.csproj文件中的参考资料如何?
标签: c# visual-studio gac visual-studio-2003