我不得不将旧项目(在.Net 2中)导入Visual Studio 2013,它使用了Microsoft主互操作程序集。
Visual Studio说我需要添加对项目的引用。现在我去做了一些阅读,显然微软只发布了2010年办公室的PIA? (我有Office 2013)
现在我想知道的是。
.Net 2
(最迟),Windows 8附带4.5而不是3(默认情况下),并且大多数新计算机都将使用Office 2012或2013. 答案 0 :(得分:120)
PIA是一种历史工件,只有旧的.NET版本(v4之前)才需要。它们被“嵌入互操作类型”功能彻底而优雅地取代,也被称为“无PIA”功能。自Visual Studio 2010以来支持,在选择引用程序集时,您将在“属性”窗口中找到它。它默认为True
。一个涵盖基础技术的好视频是available here。
微软不发布Office 2013 PIA的原因是,他们希望您嵌入互操作类型。
该功能非常理想,它可以避免您的客户必须在他的机器上安装PIA,并让您将它们包含在您的安装程序中。在没有照顾它的情况下解决问题,这是一个完全太常见的事故。此外,Office的PIA非常大,嵌入互操作类型的巨大优势是您的程序集只包含您实际使用的类型。许多兆字节减少到几千字节。
工作流程略有不同。现在,您可以使用COM选项卡,而不是在“添加引用”对话框(.NET Framework选项卡)中添加对Microsoft.Office.Interop
程序集的引用。然后选择“Microsoft Excel 15.0 Object Library
”来生成使用Excel的程序的互操作类型。如果您加载以前使用过PIA的旧项目,那么只需删除这些参考组件并从COM选项卡中添加它们。
请注意,某项功能已丢失,故意针对您在开发计算机上实际未安装的旧版Office更加困难。如果这是一个要求,那么您仍然需要该版本的PIA,在“属性”窗口中强制将“嵌入互操作类型”设置为“真”。实际上这样做是值得怀疑的,微软很难保持新的Office版本与旧版本完全兼容。他们已经保持了15年,但它已经失去了动力。最糟糕的情况是针对比您在计算机上安装的版本更新的版本,这可能会导致程序崩溃,非常难以诊断AccessViolationException
之类的异常。
请注意,您必须对代码进行少量修改才能使其正常工作。合成的“XxxxClass
”类未嵌入,只是“Xxxx
”接口。只需从 new 语句中删除“Class
”一词。
答案 1 :(得分:4)
使用Office 365的VS 2015社区 - 无论出于何种原因,从COM对象添加都不起作用。解决方案是进入GAC并找到互操作程序集,将它们复制到临时目录,然后像任何DLL一样添加到项目中。
答案 2 :(得分:1)
此外,如果您现在还不知道,Windows 8确实有旧版本的.NET Framework,但默认情况下它们并未安装。转到程序功能--->向Windows添加功能---->并且第一个复选框应该是.NET 3.0,可能是2.0。请注意,如果您使用的是WSUS服务器,则需要告知Windows从Windows Update服务器获取文件。希望它有所帮助!
答案 3 :(得分:0)
官方认为PIA for Office没有向后兼容性。实际上它有效。
出于向后兼容性的原因,我使用PIA for Office XP已有好几年了,它适用于Office XP,2003年,2007年和2010年(尚未经过2013年测试)以及Windows XP,Vista,7和8。
为了与不同版本的Windows兼容,我正在使用.NET framework 3.5。
对于未来......这取决于你对PIA的所作所为。如果可能的话,最好直接处理Open XML文件或为word / excel创建一个加载项。
答案 4 :(得分:0)
我刚刚发现Visual Studio 2013 express已不再拥有办公室支持。所以你至少需要亲版本来使它工作。