.net 办公室PIA和应用程序包装

.net 办公室PIA和应用程序包装,.net,windows-installer,office-interop,.net,Windows Installer,Office Interop,我继承了一个项目,在为下一个版本做准备时,我试图更好地理解做出某些决定的原因。现有产品设计用于Office 2010。在VS项目中,有对GAC中办公室PIA的引用。在InstallShield项目中,Office PIA实际上被打包并安装到应用程序目录中 在准备与Office 2013交互的新版本时,我发现每个Office PIA的旧版本和新版本不能同时包含在项目中,否则会发生命名冲突,我将无法编译。我还发现,如果我尝试将新版本的PIAs与旧版本的Office一起使用,那么坏事情就会发生,我的应

我继承了一个项目,在为下一个版本做准备时,我试图更好地理解做出某些决定的原因。现有产品设计用于Office 2010。在VS项目中,有对GAC中办公室PIA的引用。在InstallShield项目中,Office PIA实际上被打包并安装到应用程序目录中

在准备与Office 2013交互的新版本时,我发现每个Office PIA的旧版本和新版本不能同时包含在项目中,否则会发生命名冲突,我将无法编译。我还发现,如果我尝试将新版本的PIAs与旧版本的Office一起使用,那么坏事情就会发生,我的应用程序也会崩溃。因此,我得出结论,必须编制一个单独的版本,一个目标是2010年,另一个目标是2013年

当我在不产生大量冗余的情况下尽可能地更新代码和安装程序项目时,我开始更多地考虑PIA本身。如果用户安装了Office,那么这些PIA应该已经存在于其GAC中,用于其Office版本。将较新的PIA添加到安装程序中似乎只会在安装程序文件中增加额外的文件,而这些文件在一开始可能并不需要。如果用户没有Office,他们首先就不能使用我的应用程序


所以,我的主要问题是,我是否有理由继续在安装程序中包含Office PIA?如果是这样的话,它们应该在用户的GAC中注册,还是仅仅放在应用程序目录中?根据我的总结,我是否对PIA的位置有一些根本性的误解?

我认为当用户安装Office时,PIA是可选安装的。你不能肯定。看,你不应该再使用PIA了。使用VS2010中提供的嵌入互操作类型功能(也称为“无PIA”)。@Steve谢谢,我认为该链接回答了我问题的第一部分。如果我想确保PIA可用,而用户可能不需要执行添加新Office功能的步骤,我想我需要打包这些PIA。@HansPassant看起来你是对的,只是我没有提到我需要编译到.NET 3.5,而该选项不可用。对于任何偶然发现这一点并有此选择的人来说,附带的问题是:如果我的解决方案中有两个项目,并且选择在这两个项目中嵌入相同的互操作类型,那么编译后会增加这两个项目的大小吗?如果其中一个项目引用了另一个呢?请注意,您也可以让安装程序机制运行PIAs可再发行msi。