Visual Studio 2012 过期的 DLL

3

介绍

我不知道这是一个bug还是我完全没有理解。

我有一个项目(Windows服务),叫做WINSERV。它依赖于3个来自3个独立项目(Project A、B、C)的DLL。然而,A依赖于C,B既依赖于A又依赖于C。

使用InstallShield LE构建安装程序时,无论我怎么做,我的C项目总是一个过期版本,而我无法使其改变。我增加了版本号,“清除并重建”,但在远程服务器上安装时,版本总是过期的。

我将每个依赖于C的项目设置为“不复制到本地”,以允许WinServ项目自己维护“引用”并将其复制到安装程序中。

问题

但无论我做什么,安装后都是过期版本。几个小时后,我终于通过在WINSERV项目上删除“复制到本地”,并将C项目添加到“应用程序数据”(C项目的主要输出)中的InstallShield安装项目中,解决了这个问题。这似乎起作用了!!!

问题

我试了一千次“make clean”。我在构建和创建安装程序之前检查了C项目的DLL版本,它总是过期的旧版本。

有人能解释这个问题吗?还是一个bug?

PS. InstallShield LE不支持Windows服务,如果你正在阅读此文,请注意。


遇到了同样的问题。奇怪的是,安装程序包含的旧版dll版本在我的电脑上并不存在(从根目录搜索了my.dll)。到目前为止,已经花费了很多时间进行故障排除。真希望微软在2012年留下了VS安装程序。 - JimSTAT
2个回答

0

这绝对是Visual Studio 2012中的一个bug。 我成功地复制了以下步骤:

在打开一个项目(比如引用MYSQL 5.1.4)的同时, 我开始卸载MySQL Connector并安装5.1.7版本。 然后关闭Visual Studio 2012并重新编译,一切正常。

然而,当我使用InstallShield构建时,它仍然引用5.1.4版本,尽管已经被卸载。我的想法是它在某个地方缓存了它,并在构建过程中稍后访问。

我是如何解决的呢?在安装新版本/旧版本/不同版本的现有DLL之后,我重新启动了我的机器,现在一切都好了。

希望这对某人有所帮助。


0

听起来像是我曾经遇到的类似问题。

由于某种原因,InstallShield有时会从临时ASP.NET文件夹获取DLL(即使您的项目不是ASP)

尝试清除文件夹:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接