Visual Studio 安装项目 - 强制安装 .DLL 文件?

3
我有一个更新的第三方DLL必须安装到我的客户计算机上。我们目前使用在Visual Studio 2010中创建的MSI自动安装程序。不幸的是,第三方DLL版本不正确,提供者只增加了程序集版本而没有增加文件版本。由于第三方提供者是Microsoft,等待他们修复问题并不现实。我们需要立即获取新的DLL并在一个MSI更新中发送给用户。目前,MSI更新无法覆盖DLL。在VS2010设置项目中是否有一种方法可以强制覆盖一个DLL,即使文件版本匹配?
2个回答

1

如果您愿意进行msi后构建调整,可以访问文件表并进行“版本欺骗”。另一个想法是不将该DLL放入安装程序中。查找来自Microsoft的安装程序(如果存在),可以将其放入引导程序中,或创建自己的安装程序,并使用AMUS而不是OMUS进行版本规则。


无法将.DLL文件排除在包内。没有可用的MSM且无法更改安装参数。自动更新代码已经在现场运行。当它执行时,会使用命令行进行静默升级。你能详细解释一下"版本欺骗"吗? - Igorek
版本欺骗是指更新文件表以欺骗MSI认为它具有比实际版本更新的更高版本。虽然有一些小问题,但基本上它将为单个组件提供始终覆盖的功能。真正的解决方案是遵循正确的软件配置管理(SCM)实践来管理您的资源(是的,很遗憾我们在这里谈论的是微软)。 - Christopher Painter
感谢进一步的阐述,但我不确定如何以编程方式解决版本切换问题。Google并没有提供太多帮助。您能否提供一个链接,说明如何处理这个问题?谢谢。 - Igorek
你需要做类似以下的事情,只是要对文件表进行操作。顺便说一句,这是我从不使用VDPROJ的许多原因之一。它的功能太过有限了。http://blogs.msdn.com/b/astebner/archive/2007/05/28/2958062.aspx - Christopher Painter

0

你不能只将文件作为“文件”添加到安装程序中,并与其他文件一起安装吗?不要将其设置为项目输出或任何预设的安装操作。转到文件部分,右键单击“应用程序文件”文件夹,然后选择“添加文件”。导航到所需文件并选择它。


MSI有一个名为“文件成本核算”的过程,它查看的是文件版本(AssemblyFileVersion)而不是AssemblyVersion属性。如果DLL的旧版本和新版本具有相同的版本号,则即使它们不同,MSI也不会覆盖它。 - Christopher Painter
即使您明确告诉它要复制文件,它也会出现这种情况吗?您可以创建一个自定义安装程序类,从MSI创建的临时文件夹中复制dll,然后在复制完成后删除该文件夹。不过现在感觉有点棘手了... - John Batdorf
我尝试将文件作为普通文件放入包中并将其从输出中排除。但它没有被部署到旧版本上。 - Igorek
使用安装程序类?我怎么没想到呢?<讽刺/> - Christopher Painter

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