适用于2007年和2013年的Office Addin的常见安装程序

时间:2014-10-20 17:49:01

标签: ms-office outlook-addin

如何为Office 2007/2010和2013构建通用安装程序?

csproj文件有不同(有不同的主机包ID)

构建适用于Addins所有主机的公共插件的最佳方法是什么?

我尝试了以下内容 - 我在Visual Studio 2010中创建了2007年的插件应用程序。 我能够使用VS2010中的安装项目(msi)构建安装程序。它适用于outlook 2007和2010.(进行了注册表更改/文件设置)。

此链接很有用:http://msdn.microsoft.com/en-us/vsto/ff937654.aspx

使用Click one进行安装非常有用。由于我必须包含一些额外的文件。所以选择了自定义安装程序。

现在下一步是2013年。我在2013年使用了相同的安装程序。它崩溃了。我得到一个异常,表明堆栈溢出。

注意:我使用Visual Studio 2010为OUtlook 2007和2010使用C#开发了应用程序

1 个答案:

答案 0 :(得分:1)

事实上,你在一个问题中提出了两个问题!这里答案:
如何为Office 2007/2010和2013构建通用安装程序?
这根本不是问题,不需要为每个版本的办公室安装不同的安装程序(如果你要进行每台机器设置,x86和x64办公室位数除外)。如果您为每个版本的办公室使用特定功能,则可以使用Application.Version在加载项代码中检查办公室版本。
构建一个适用于 Addins 所有主机的公共插件的最佳方法是什么?我认为你的意思是:最好的方法是什么.. 。 Office 的所有主机?您可以通过两种方式完成此任务:

  • 使用商业产品Addin Express
  • 通过创建共享加载项(不幸的是,自VS 2012以来已删除), 但是你仍然可以通过创建一个类来手动创建它 库项目,一旦创建,添加一个实现的类 Extensibility.IDTExtensibility2接口,如果您打算这样做 在你的插件中支持色带,然后实现 IRibbonExtensibility也是如此。另外,添加对Office.dll和的引用 Extensibility.dll。最后你应该有类似的东西 这样的:

    [GuidAttribute(“1AF54C8F-6E33-44DE-9B4A-FF3801A51104”),ProgId(“MyAddin.Connect”)]

        public class Connect : Object, Extensibility.IDTExtensibility2, IRibbonExtensibility
        {
            private object applicationObject;
            private object addInInstance;
    
            public Connect()
            {
    
            }
    
            public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
            {
                applicationObject = application;
                addInInstance = addInInst;
            }
    
            public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
            {
            }
    
            public void OnAddInsUpdate(ref System.Array custom)
            {
            }
    
            public void OnStartupComplete(ref System.Array custom)
            {
            }
    
            public void OnBeginShutdown(ref System.Array custom)
            {
            }
    
            public string GetCustomUI(string RibbonID)
            {
                StreamReader customUIReader = new System.IO.StreamReader(
                @"APP\PATH\Ribbon.xml");
    
                return customUIReader.ReadToEnd();
            }
    
            public void onMsoCommand(Office.IRibbonControl control, ref bool Cancel)
            {
    
            }
        }
    

BTW 这是我第一次回答SO,希望它有所帮助!