<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Office Development with Visual Studio</title><link>http://blogs.msdn.com/b/vsto/</link><description>Develop Office Business Applications using Visual Studio</description><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.17018 (Build: 5.6.583.17018)</generator><item><title>VSTO Developer Center is now part of the Office Developer Center</title><link>http://blogs.msdn.com/b/vsto/archive/2011/08/02/vsto-developer-center-is-now-part-of-the-office-developer-center.aspx</link><pubDate>Tue, 02 Aug 2011 17:35:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10192112</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10192112</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2011/08/02/vsto-developer-center-is-now-part-of-the-office-developer-center.aspx#comments</comments><description>&lt;p&gt;In order to provide a more integrated experience for folks building custom solutions on the Office platform, we’ve merged the content from the VSTO Developer Center into the &lt;a href="http://msdn.com/office" target="_blank"&gt;Office Developer Center&lt;/a&gt;. You’ll still find great learning content there including:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/office/hh133430.aspx" target="_blank"&gt;&lt;strong&gt;Getting Started with Office Development with Visual Studio (VSTO)&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/office/hh128771.aspx"&gt;&lt;img border="0" alt="Excel Solutions with Visual Studio" align="left" src="http://i.msdn.microsoft.com/dd490655.excel_33x33(en-us,MSDN.10).jpg" /&gt;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&lt;a href="http://msdn.microsoft.com/office/hh128771.aspx"&gt;Excel Solutions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Write code to work with data and customize the user interface.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/office/hh128768.aspx"&gt;&lt;img border="0" alt="Outlook Solutions with Visual Studio" align="left" src="http://i.msdn.microsoft.com/dd490655.outlook_33x33(en-us,MSDN.10).jpg" /&gt;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&lt;a href="http://msdn.microsoft.com/office/hh128768.aspx"&gt;Outlook Solutions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Work with objects and data and customize the Outlook user interface.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/office/hh128772.aspx"&gt;&lt;img border="0" alt="Word Solutions with Visual Studio" align="left" src="http://i.msdn.microsoft.com/dd490655.word_33x33(en-us,MSDN.10).jpg" /&gt;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&lt;a href="http://msdn.microsoft.com/office/hh128772.aspx"&gt;Word Solutions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Manipulate documents, work with data, and customize the Word user interface.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/office/hh128824.aspx"&gt;&lt;img border="0" alt="Deploying Office Solutions with Visual Studio" align="left" src="http://i.msdn.microsoft.com/ee402630.Office2010_sm(en-us,MSDN.10).png" /&gt;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&lt;a href="http://msdn.microsoft.com/office/hh128824.aspx"&gt;Deploying Office Solutions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Learn to deploy Office customizations built with Visual Studio.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Happy Learning!   &lt;br /&gt;- The VSTO Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10192112" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/MSDN/">MSDN</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Announcement/">Announcement</category></item><item><title>Migrating VSTO 2005/2008 InfoPath Projects to InfoPath 2010</title><link>http://blogs.msdn.com/b/vsto/archive/2011/04/22/migrating-vsto-2005-2008-infopath-projects-to-infopath-2010.aspx</link><pubDate>Fri, 22 Apr 2011 15:54:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10157125</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10157125</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2011/04/22/migrating-vsto-2005-2008-infopath-projects-to-infopath-2010.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: x-small;"&gt;If you missed it, last week the InfoPath team posted &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: x-small;"&gt;about how to migrate your InfoPath projects from Visual Studio Tools for Office 2005 or Visual Studio Tools for Office 2008 (VSTO) into InfoPath 2010 using Visual Studio Tools for Applications (VSTA). &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: x-small;"&gt;Check it out here: &lt;a href="http://blogs.msdn.com/b/infopath/archive/2011/04/14/working-with-vsto-2008-projects-in-infopath-2010.aspx" class="internal-link view-post"&gt;&lt;span&gt;&lt;/span&gt;Working with VSTO 2008 Projects in InfoPath 2010&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10157125" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/InfoPath/">InfoPath</category></item><item><title>The Phases of the ClickOnce Trust Prompt (Mary Lee)</title><link>http://blogs.msdn.com/b/vsto/archive/2011/01/11/the-phases-of-the-clickonce-trust-prompt.aspx</link><pubDate>Tue, 11 Jan 2011 17:37:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10114259</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10114259</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2011/01/11/the-phases-of-the-clickonce-trust-prompt.aspx#comments</comments><description>&lt;p&gt;Signing your Office solutions with a certificate is a mandatory step, but there are several optional steps that can change the way the certificate is presented to the end user or customer. &lt;/p&gt;  &lt;p&gt;This example uses a Visual Studio generated test certificate, but the dialog box is similar to what you would see if you are using a purchased code-signing certificate. These steps are listed in the &lt;a href="http://msdn.microsoft.com/en-us/library/ms172241.aspx"&gt;How to: Add a Trusted Publisher to a Client Computer for ClickOnce Applications&lt;/a&gt; topic in the MSDN Library and assumes that the ClickOnce Trust Prompt and inclusion list are enabled as outlined in &lt;a href="http://msdn.microsoft.com/en-us/library/bb772070.aspx"&gt;How to: Configure Inclusion List Security&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Phase 1. If the certificate used to sign the Office solution is not added to the Root or the TrustedPublisher stores, the Publisher is shown as &lt;em&gt;Unknown Publisher&lt;/em&gt; and there is a&lt;em&gt; yellow shield &lt;/em&gt;presented in the Microsoft Office Customization Installer dialog box.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/0652.clip_5F00_image002_5F00_43936B76.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/6521.clip_5F00_image002_5F00_thumb_5F00_6C4ED0BF.jpg" width="546" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Phase 2. If the certificate used to sign the Office solution is in the Root store, but not the Trusted Publisher list, the Publisher is shown as &lt;em&gt;Redmond\marylee&lt;/em&gt; and there is a &lt;em&gt;green shield&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;The step used to add the certificate to the Root store is the following: &lt;strong&gt;certmgr.exe -add good.cer -c -s -r localMachine Root&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/3872.clip_5F00_image0025_5F00_5A0609FD.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002[5]" border="0" alt="clip_image002[5]" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/2308.clip_5F00_image0025_5F00_thumb_5F00_19CFF083.jpg" width="551" height="287" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Phase 3. If the certificate used to sign the add-in is in the Root list and the Trusted Publisher list, you only see that the add-in was installed successfully.&lt;/p&gt;  &lt;p&gt;The step used to add the certificate to the TrustedPublisher store is the following: &lt;strong&gt;certmgr.exe -add good.cer -c -s -r localMachine TrustedPublisher&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/8750.clip_5F00_image0027_5F00_5999D708.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002[7]" border="0" alt="clip_image002[7]" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/5444.clip_5F00_image0027_5F00_thumb_5F00_6B766AD5.jpg" width="527" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you have questions, visit the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads"&gt;VSTO forum&lt;/a&gt; to search for answers or post new questions.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mary Lee, Programming Writer.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10114259" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/ClickOnce/">ClickOnce</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Mary+Lee/">Mary Lee</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Deployment/">Deployment</category></item><item><title>Performance Improvements Coming Soon to a Service Pack Near You (Stephen Peters)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/11/30/performance-improvements-coming-soon-to-a-service-pack-near-you-stephen-peters.aspx</link><pubDate>Tue, 30 Nov 2010 19:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10098545</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10098545</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/11/30/performance-improvements-coming-soon-to-a-service-pack-near-you-stephen-peters.aspx#comments</comments><description>&lt;p&gt;With the SP1 work winding down, I thought that I&amp;rsquo;d take a moment and discuss three new performance improvements that are going into VSTO for SP1. We have listened to your feedback and understand that startup time is a major issue, and so we have focused on attempts to make the VSTO runtime load faster.&lt;/p&gt;
&lt;p&gt;In this article, I will be delving into these features and how you can take advantage of them. The most important feature is Fast Path loading, which is a loading path for the runtime which is as fast and as lean as possible. In addition, we updated the form region and ribbon discovery process so reflection is not required in most cases. Plus, I will also share a few of the numbers we gathered during this effort so that you can get a before and after picture.&lt;/p&gt;
&lt;h5&gt;VSTO Fast Path&lt;/h5&gt;
&lt;p&gt;The Fast Path is a new way to load and launch VSTO addins that is much faster than the current launch path. However, it achieves this speed by bypassing a few of the steps that would normally happen during addin launch. The following conditions must be met in order to use the fast path:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The addin (or document) manifest must be installed under %ProgramFiles% or %ProgramW6432%. &lt;/li&gt;
&lt;li&gt;The addin must be registered as |vstolocal in the registry. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When the fast path is in use, the following steps will be skipped:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Schema validation on the manifests &lt;/li&gt;
&lt;li&gt;Any automatic update checking &lt;/li&gt;
&lt;li&gt;Security checks &amp;ndash; the digital signatures of the manifests will not be validated. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notice that the requirement that the add-in is deployed into the secure location on the user machine allows us to relax the security verifications done at runtime without compromising the security of the machine. Relaxing these expensive checks is what contributed the most to the improvements in startup time.&lt;/p&gt;
&lt;p&gt;In order to take advantage of Fast Path loading, an addin has to be deployed via an MSI. As a consequence, these addins also will not be able to automatically check for updates.&lt;/p&gt;
&lt;h5&gt;Ribbon Aware Manifests&lt;/h5&gt;
&lt;p&gt;As mentioned in a &lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/06/03/vsto-performance-ribbon-reflection.aspx"&gt;previous blog post&lt;/a&gt;, VSTO reflects over the addin assembly in order to find Ribbon extensions. On particularly large assemblies, this can be quite time consuming. While there have been manual workarounds for this behavior in the past, we are now including Ribbon extension types directly into the VSTO manifest. If there are no Ribbon extensions, then an empty list is placed in the manifest, which will tell the VSTO runtime that reflection is not necessary.&lt;/p&gt;
&lt;p&gt;In order to take advantage of this improvement, the addin must be built (or rebuilt) with Visual Studio 10.0 SP1, and the addin must be loaded with the SP1 version of the VSTO Runtime. The addin must also be targeting .Net 4.0. If you attempt to load an SP1 addin with a RTM runtime, or if you load an RTM addin with the SP1 runtime, all of the ribbon objects will still be discovered and loaded; the runtime will just have to use reflection to find them.&lt;/p&gt;
&lt;p&gt;Of course, if your code already overrides CreateRibbonObjects or CreateRibbonExtensibilityObject as mentioned in the above blog entry, then this optimization does not apply to you. The reason why this was implemented is because many people are not aware of this optimization, and we want to ensure that we are as performant as possible by default with as little manual optimization as possible. &lt;/p&gt;
&lt;p&gt;To better visualize the new ribbon xml, here are two examples of its intended use:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:appAddIn &lt;/span&gt;&lt;span style="color: red"&gt;application&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Excel&lt;/span&gt;" &lt;span style="color: red"&gt;loadBehavior&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;3&lt;/span&gt;" &lt;span style="color: red"&gt;keyName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ExcelAddIn14&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:friendlyName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ExcelAddIn14&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:friendlyName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ExcelAddIn14&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4.1:ribbonTypes &lt;/span&gt;&lt;span style="color: red"&gt;xmlns:vstov4.1&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;urn:schemas-microsoft-com:vsto.v4.1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4.1:ribbonType &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ExcelAddIn14.Ribbon1, ExcelAddIn14, &lt;/span&gt;
        &lt;span style="color: blue"&gt;Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4.1:ribbonTypes&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:appAddIn&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That addin had one ribbon type, and the class is called ExcelAddIn14.Ribbon1, and it is part of the ExcelAddIn14.dll assembly. &lt;/p&gt;
&lt;p&gt;Here is one with no ribbons:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:appAddIn &lt;/span&gt;&lt;span style="color: red"&gt;application&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Excel&lt;/span&gt;" &lt;span style="color: red"&gt;loadBehavior&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;3&lt;/span&gt;" &lt;span style="color: red"&gt;keyName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ExcelAddIn15&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:friendlyName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ExcelAddIn15&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:friendlyName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ExcelAddIn15&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4.1:ribbonTypes &lt;/span&gt;&lt;span style="color: red"&gt;xmlns:vstov4.1&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;urn:schemas-microsoft-com:vsto.v4.1&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:appAddIn&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The empty ribbonTypes list serves to tell the SP1 runtime that doing the reflection is unnecessary. This will save a lot of time during VSTO startup.&lt;/p&gt;
&lt;h5&gt;VSTO Form Region discovery&lt;/h5&gt;
&lt;p&gt;When loading an Outlook addin that has Form Regions, the VSTO Runtime uses reflection to discover Form Region factories and match them up with Form Regions registered with the addin. This had the potential to inflict a serious performance hit, especially if the addin assembly contained a lot of different types.&lt;/p&gt;
&lt;p&gt;To eliminate this performance hit, the name of the factory is now being included in the addin manifest. Now when Outlook requests the factory from the addin, the addin knows immediately which class to instantiate and doesn&amp;rsquo;t need to reflect over every type in the assembly to find the appropriate class. If you look in the new SP1 manifest, you can see the new information:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;vstov4:formRegion &lt;/span&gt;
    &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Outlook_OFR_MSI.EmptyFormRegion&lt;/span&gt;" 
    &lt;span style="color: red"&gt;vstov4.1:class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Outlook_OFR_MSI.EmptyFormRegion+EmptyFormRegionFactory&lt;/span&gt;" 
    &lt;span style="color: red"&gt;xmlns:vstov4.1&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;urn:schemas-microsoft-com:vsto.v4.1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Like the Ribbon aware manifest above, the SP1 runtime is capable of loading an addin with Form Regions that was built with the RTM version of VS, and the RTM runtime can load an SP1 addin. You just won&amp;rsquo;t be able to take advantage of this improvement.&lt;/p&gt;
&lt;h5&gt;Numbers&lt;/h5&gt;
&lt;p&gt;Below are some of the numbers that we tracked on startup time during this effort. These numbers were collected on a machine in a &amp;lsquo;cold&amp;rsquo; state (everything in memory flushed out to disk, superfetch disabled) in order to give us the most consistent results during our work. In addition, there are no other applications running at the time that Outlook was launched, and all addins except for the one that we were testing was disabled.&lt;/p&gt;
&lt;p&gt;There four startup times of interest are as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Outlook application baseline &amp;ndash; an empty mail account, no addins loaded &lt;/li&gt;
&lt;li&gt;Outlook simple addin &amp;ndash; a simple .Net 4.0 addin. In SP1, it would take advantage of the fastpath as well as the ribbon improvements (since the VSTO runtime was no longer looking for Ribbons) &lt;/li&gt;
&lt;li&gt;Outlook Ribbon addin &amp;ndash; this is similar to the above one, only now we see the time it takes to instantiate a simple Ribbon extension. &lt;/li&gt;
&lt;li&gt;Outlook WPF Form Region &amp;ndash; this is the simple addin plus the time to load (but not show) a Form Region with a WPF control on it. This takes advantage of all of the improvements listed in this article. &lt;/li&gt;
&lt;/ol&gt;
&lt;table cellpadding="2" cellspacing="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="199" valign="bottom"&gt;&lt;/td&gt;
&lt;td colspan="2" width="143" valign="bottom" style="background-color: #538ed5"&gt;Outlook + VSTO RTM &lt;/td&gt;
&lt;td colspan="2" width="134" valign="bottom" style="background-color: #c2d69a"&gt;Outlook + VSTO SP1 &lt;/td&gt;
&lt;td width="123" valign="bottom" style="background-color: #31849b"&gt;Improvement &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="199" valign="bottom" style="background-color: #b2a1c7"&gt;Scenario &lt;/td&gt;
&lt;td width="77" valign="bottom" style="background-color: #538ed5"&gt;Time &lt;/td&gt;
&lt;td width="66" valign="bottom" style="background-color: #538ed5"&gt;% &lt;/td&gt;
&lt;td width="73" valign="bottom" style="background-color: #c2d69a"&gt;Time &lt;/td&gt;
&lt;td width="61" valign="bottom" style="background-color: #c2d69a"&gt;% &lt;/td&gt;
&lt;td width="123" valign="bottom" style="background-color: #31849b"&gt;% of App baseline &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="199" valign="bottom" style="background-color: #ccc0da"&gt;Outlook application baseline &lt;/td&gt;
&lt;td width="77" valign="bottom" style="background-color: #8db4e3"&gt;3762 &lt;/td&gt;
&lt;td width="66" valign="bottom" style="background-color: #8db4e3"&gt;100.00% &lt;/td&gt;
&lt;td width="73" valign="bottom" style="background-color: #d7e4bc"&gt;3762 &lt;/td&gt;
&lt;td width="61" valign="bottom" style="background-color: #d7e4bc"&gt;100.00% &lt;/td&gt;
&lt;td width="123" valign="bottom" style="background-color: #93cddd"&gt;N/A &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="199" valign="bottom" style="background-color: #ccc0da"&gt;Outlook simple addin &lt;/td&gt;
&lt;td width="77" valign="bottom" style="background-color: #8db4e3"&gt;10215 &lt;/td&gt;
&lt;td width="66" valign="bottom" style="background-color: #8db4e3"&gt;271.53% &lt;/td&gt;
&lt;td width="73" valign="bottom" style="background-color: #d7e4bc"&gt;7952 &lt;/td&gt;
&lt;td width="61" valign="bottom" style="background-color: #d7e4bc"&gt;211.38% &lt;/td&gt;
&lt;td width="123" valign="bottom" style="background-color: #93cddd"&gt;60% &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="199" valign="bottom" style="background-color: #ccc0da"&gt;Outlook Ribbon addin &lt;/td&gt;
&lt;td width="77" valign="bottom" style="background-color: #8db4e3"&gt;10973 &lt;/td&gt;
&lt;td width="66" valign="bottom" style="background-color: #8db4e3"&gt;291.68% &lt;/td&gt;
&lt;td width="73" valign="bottom" style="background-color: #d7e4bc"&gt;8424 &lt;/td&gt;
&lt;td width="61" valign="bottom" style="background-color: #d7e4bc"&gt;223.92% &lt;/td&gt;
&lt;td width="123" valign="bottom" style="background-color: #93cddd"&gt;68% &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="199" valign="bottom" style="background-color: #ccc0da"&gt;Outlook WPF Form Region &lt;/td&gt;
&lt;td width="77" valign="bottom" style="background-color: #8db4e3"&gt;12231 &lt;/td&gt;
&lt;td width="66" valign="bottom" style="background-color: #8db4e3"&gt;325.12% &lt;/td&gt;
&lt;td width="73" valign="bottom" style="background-color: #d7e4bc"&gt;8192 &lt;/td&gt;
&lt;td width="61" valign="bottom" style="background-color: #d7e4bc"&gt;217.76% &lt;/td&gt;
&lt;td width="123" valign="bottom" style="background-color: #93cddd"&gt;107% &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As you can see, there are many performance improvements to the VSTO Runtime coming in Visual Studio 2010 SP1. Not only that, but many tweaks that used to require extra work (such as working around Ribbon reflection) are now available out of the box with no interaction on the user&amp;rsquo;s part. This will help you deliver VSTO addins that are faster to your end-users.&lt;/p&gt;
&lt;p&gt;UPDATE: &lt;a href="http://tinyurl.com/2atm444"&gt;Visual Studio SP1 Beta is now available!&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10098545" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Stephen+Peters/">Stephen Peters</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Performance/">Performance</category></item><item><title>Microsoft Help Viewer 1.1 - Updates Planned for Visual Studio 2010 SP1 (Kathleen McGrath)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/11/03/microsoft-help-viewer-1-1-updates-planned-for-visual-studio-2010-sp1-kathleen-mcgrath.aspx</link><pubDate>Wed, 03 Nov 2010 23:37:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10085785</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10085785</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/11/03/microsoft-help-viewer-1-1-updates-planned-for-visual-studio-2010-sp1-kathleen-mcgrath.aspx#comments</comments><description>&lt;p&gt;Paul O’Rear, a Program Manager on the Library Experience team, describes the changes to the Microsoft Help Viewer planned for Visual Studio 2010 SP1. He demonstrates the new functionality of the viewer in an early build of Help Viewer 1.1. &lt;/p&gt;  &lt;p&gt;See &lt;a href="http://channel9.msdn.com/Blogs/kmcgrath/Microsoft-Help-Viewer-Updates-Planned-for-Visual-Studio-SP1" target="_blank"&gt;Microsoft Help Viewer – Updates Planned for Visual Studio 2010 SP1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/kmcgrath/Microsoft-Help-Viewer-Updates-Planned-for-Visual-Studio-SP1" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/7612.image_5F00_3.png" width="557" height="315" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You can learn more in &lt;a href="http://thirdblogfromthesun.com/2010/10/the-story-of-help-in-visual-studio-2010/"&gt;The Story of Help in Visual Studio 2010&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;--Kathleen&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10085785" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Kathleen+McGrath/">Kathleen McGrath</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category></item><item><title>Installing Office 2007/VSTO 3.0 Solutions on Computers with Office 2010 (Mary Lee)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/10/05/installing-office-2007-vsto-3-0-solutions-on-computers-with-office-2010.aspx</link><pubDate>Wed, 06 Oct 2010 00:35:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10071966</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10071966</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/10/05/installing-office-2007-vsto-3-0-solutions-on-computers-with-office-2010.aspx#comments</comments><description>&lt;p&gt;You have probably been reading and hearing about Microsoft Office 2010 for some months. Now, you may be wondering how much work is necessary to install your existing Office 2007/VSTO 3.0 solutions on customer computers that have Office 2010. Perhaps you’re thinking about migrating the Windows Installer Setup projects or ClickOnce deploymen projects? The answer is that you don’t need to change anything. If you have Office 2007 add-ins that were created for the VSTO 3.0 runtime, the registry keys for Office 2010 add-ins created for the VSTO 2010 runtime are exactly the same. For Office 2007 document-level projects, the custom document properties are also the same in Office 2010. The same deployment project used to install Office 2007 solutions should work on Office 2010 as well.&lt;/p&gt;  &lt;p&gt;In fact, deployment becomes even easier for two reasons: fewer prerequisites to include and fewer custom actions to run.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Less need to deploy the VSTO runtime. The VSTO 2010 runtime with the .NET Framework 3.5 extensions is already included in Microsoft Office 2010. For more information, see &lt;a title="http://blogs.msdn.com/b/vsto/archive/2010/05/13/when-do-i-need-to-deploy-the-vsto-runtime.aspx" href="http://blogs.msdn.com/b/vsto/archive/2010/05/13/when-do-i-need-to-deploy-the-vsto-runtime.aspx"&gt;http://blogs.msdn.com/b/vsto/archive/2010/05/13/when-do-i-need-to-deploy-the-vsto-runtime.aspx&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Less need for the inclusion list. VSTO add-ins installed to the Program Files directory are considered trusted without creating an inclusion list entry for each solution and each user. For more information, see &lt;a title="http://blogs.msdn.com/b/vsto/archive/2010/03/10/changes-in-the-security-model-for-office-solutions.aspx" href="http://blogs.msdn.com/b/vsto/archive/2010/03/10/changes-in-the-security-model-for-office-solutions.aspx"&gt;http://blogs.msdn.com/b/vsto/archive/2010/03/10/changes-in-the-security-model-for-office-solutions.aspx&lt;/a&gt;.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;MSDN Library resources include the following topics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee712596.aspx"&gt;Visual Studio Tools for Office Runtime Installation Scenarios&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb608607.aspx"&gt;Trusting Office Solutions by Using Inclusion Lists&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you have any questions, search for answers or post questions in the Visual Studio Tools for Office forum at &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads"&gt;http://social.msdn.microsoft.com/Forums/en-US/vsto/threads&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Mary Lee, Programming Writer.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10071966" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/ClickOnce/">ClickOnce</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/runtime/">runtime</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Mary+Lee/">Mary Lee</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Windows+Installer/">Windows Installer</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Deployment/">Deployment</category></item><item><title>Office 2010 PIA BootStrapper Released (Beth Massi, Lily Ma)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/09/10/office-2010-pia-bootstrapper-released-beth-massi-lily-ma.aspx</link><pubDate>Sat, 11 Sep 2010 00:26:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10060569</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10060569</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/09/10/office-2010-pia-bootstrapper-released-beth-massi-lily-ma.aspx#comments</comments><description>&lt;p&gt;Today we released the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5d57c998-b630-4f38-afaa-b79747a3da06&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Office 2010 Primary Interop Assemblies (PIA) Bootstrapper Installer&lt;/a&gt; which adds the Microsoft Office 2010 Primary Interop Assemblies to the Prerequisites Dialog Box in Visual Studio 2010 or Visual Studio 2008. Then when you deploy with ClickOnce or Windows Installer, you can select this option to deploy the Microsoft Office 2010 PIAs to end-user computers.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/0081.image_5F00_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/0003.image_5F00_thumb.png" width="499" height="385" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Download it here: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5d57c998-b630-4f38-afaa-b79747a3da06&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Office 2010 Primary Interop Assemblies (PIA) Bootstrapper Installer&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Make sure to read the instructions on the download page in order to properly set up the bootstrapper to appear in Visual Studio. Now when you create Office 2010 solutions with Visual Studio 2010 you can select to deploy this prerequisite component with your solution to your end users. &lt;/p&gt;  &lt;p&gt;For more information on developing Office solutions with Visual Studio please visit the &lt;a href="http://msdn.microsoft.com/en-us/vsto/default.aspx"&gt;Office Development with Visual Studio Developer Center&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Enjoy,   &lt;br /&gt;-&lt;a href="http://www.bethmassi.com" target="_blank"&gt;Beth Massi&lt;/a&gt;, Visual Studio Community&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10060569" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/primary+interop+assemblies/">primary interop assemblies</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Beth+Massi/">Beth Massi</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Lily+Ma/">Lily Ma</category></item><item><title>Deploying Microsoft Office Solutions by Using Visual Studio 2010 and Windows Installer (Mary Lee, Saurabh Bhatia)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/08/19/deploying-microsoft-office-solutions-by-using-visual-studio-2010-and-windows-installer.aspx</link><pubDate>Thu, 19 Aug 2010 18:25:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10052073</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10052073</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/08/19/deploying-microsoft-office-solutions-by-using-visual-studio-2010-and-windows-installer.aspx#comments</comments><description>&lt;p&gt;In Visual Studio 2010, you can use the ClickOnce and Windows Installer deployment technologies to deploy Office solutions that target both Microsoft Office 2007 and Microsoft Office 2010. The main advantage of using Windows Installer to deploy your Office solutions is to install application-level add-ins to AllUsers, rather than the current user only. &lt;/p&gt;  &lt;p&gt;There are detailed steps for creating a Windows Installer (.msi) file for Office 2007 and Office 2010 solutions at &lt;a title="http://msdn.microsoft.com/en-us/vsto/ff937654.aspx" href="http://msdn.microsoft.com/en-us/vsto/ff937654.aspx"&gt;http://msdn.microsoft.com/en-us/vsto/ff937654.aspx&lt;/a&gt; and code samples at &lt;a title="http://code.msdn.microsoft.com/VSTO2010MSI" href="http://code.msdn.microsoft.com/VSTO2010MSI"&gt;http://code.msdn.microsoft.com/VSTO2010MSI&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For information about the registry keys for deploying to AllUsers, see &lt;a title="http://msdn.microsoft.com/en-us/library/bb386106.aspx" href="http://msdn.microsoft.com/en-us/library/bb386106.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb386106.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For developers using Windows Installer XML, there is some useful information at &lt;a title="http://stackoverflow.com/questions/532447/how-do-you-use-wix-to-deploy-vsto-3-0-addins" href="http://stackoverflow.com/questions/532447/how-do-you-use-wix-to-deploy-vsto-3-0-addins"&gt;http://stackoverflow.com/questions/532447/how-do-you-use-wix-to-deploy-vsto-3-0-addins&lt;/a&gt;. The steps are similar for Office solutions in Visual Studio 2010.&lt;/p&gt;  &lt;p&gt;If you have any questions about the steps, search for answers or post questions in the Visual Studio Tools for Office forum at &lt;a title="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads" href="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads"&gt;http://social.msdn.microsoft.com/Forums/en-US/vsto/threads&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mary Lee, Programming Writer.&lt;/p&gt;  &lt;p&gt;Saurabh Bhatia, Program Manager.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10052073" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Mary+Lee/">Mary Lee</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Windows+Installer/">Windows Installer</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2007/">Office 2007</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Saurabh+Bhatia/">Saurabh Bhatia</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2010/">Office 2010</category></item><item><title>Channel 9 Interview: Office Add-in (VSTO) Performance Tips &amp; Tricks (Beth Massi, Stephen Peters)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/24/channel-9-interview-office-add-in-vsto-performance-tips-amp-tricks-beth-massi-stephen-peters.aspx</link><pubDate>Thu, 24 Jun 2010 16:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10029708</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10029708</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/24/channel-9-interview-office-add-in-vsto-performance-tips-amp-tricks-beth-massi-stephen-peters.aspx#comments</comments><description>&lt;p&gt;In this interview, I sit down with &lt;a href="http://blogs.msdn.com/b/vsto/archive/tags/stephen+peters/"&gt;Stephen Peters&lt;/a&gt;, a developer on the Office client tools team in Visual Studio. Steve shows us a couple of tricks for how you can squeeze the best performance out of Office solutions built with Visual Studio (VSTO). He also shows how to finely control the way your custom ribbons load, as well as how to eliminate references to the Utilities assembly. Check it out: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Channel 9 Interview: &lt;/strong&gt;&lt;a href="http://channel9.msdn.com/posts/funkyonex/Office-Solutions-VSTO-Performance-Tips--Tricks/" target="_blank"&gt;&lt;strong&gt;Office Add-in (VSTO) Performance Tips &amp;amp; Tricks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For more information, see his blog post:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/06/03/vsto-performance-ribbon-reflection.aspx"&gt;VSTO Performance: Ribbon Reflection &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy,   &lt;br /&gt;-&lt;a href="http://www.bethmassi.com/" target="_blank"&gt;Beth Massi&lt;/a&gt;, Visual Studio Community&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10029708" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Ribbon/">Ribbon</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Beth+Massi/">Beth Massi</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Community/">Community</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Stephen+Peters/">Stephen Peters</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Performance/">Performance</category></item><item><title>Sharing a Ribbon Customization Between Office Projects in Visual Studio 2010 (McLean Schofield)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/23/sharing-a-ribbon-customization-between-office-projects-in-visual-studio-2010-mclean-schofield.aspx</link><pubDate>Wed, 23 Jun 2010 18:49:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10029152</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10029152</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/23/sharing-a-ribbon-customization-between-office-projects-in-visual-studio-2010-mclean-schofield.aspx#comments</comments><description>&lt;p&gt;A &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/6decffbe-bbe1-4390-8e05-3cef6b6d2d4e"&gt;&lt;span style="color: #006666;"&gt;customer on the VSTO forums recently noticed&lt;/span&gt;&lt;/a&gt; that the steps we &lt;a href="http://blogs.msdn.com/b/vsto/archive/2008/03/10/share-a-ribbon-customization-between-office-applications.aspx"&gt;&lt;span style="color: #006666;"&gt;blogged about for sharing a single Ribbon customization between multiple projects in Visual Studio 2008&lt;/span&gt;&lt;/a&gt; no longer works in Visual Studio 2010. When following the instructions in the blog post, you get an error when you try to open the Ribbon code file in the class library project. This is because of some changes to the way the Ribbon designer was implemented in Visual Studio 2010. The upshot is that you can no longer open the Ribbon designer outside of Office projects. In addition, because Office projects that target the .NET Framework 4 have a different programming model in Visual Studio 2010, the instructions in the old blog post will also result in other errors in projects that target the .NET Framework 4. &lt;/p&gt;
&lt;p&gt;This blog post tells you how to share a single Ribbon customization (created by using the Ribbon designer) between multiple Office projects in Visual Studio 2010. &lt;em&gt;Disclaimer &amp;ndash; what I am about to show you in this blog post is not supported, and has not been officially tested by the product team in any way.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Targeting the .NET Framework 3.5&lt;/h3&gt;
&lt;p&gt;If your Office projects target the .NET Framework 3.5, then the instructions in the old blog post still apply, with just one change. Rather than design your Ribbon customization in the class library project, now you must design it in an Office project, because of the change to the implementation of the Ribbon designer noted above. Here are the modified instructions.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Visual Studio, open (or create) an Office project that targets the .NET Framework 3.5, and that targets an Office application that supports the Ribbon. &lt;/li&gt;
&lt;li&gt;Add a &lt;strong&gt;Ribbon (Visual Designer)&lt;/strong&gt; item to the project. &lt;/li&gt;
&lt;li&gt;Design your Ribbon customization. Be sure to set the &lt;strong&gt;Modifiers&lt;/strong&gt; property to &lt;strong&gt;Public&lt;/strong&gt; for any controls/tabs/groups that you want to be able to access in other Office projects. Also be sure to&amp;nbsp;set the &lt;strong&gt;RibbonType&lt;/strong&gt; property of the Ribbon to all Ribbon types you want to support in other Office projects that consume the shared Ribbon. For example, if you want to use the Ribbon customization in Excel and Word projects, set &lt;strong&gt;RibbonType&lt;/strong&gt; to Microsoft.Excel.Workbook and Microsoft.Word.Document. &lt;/li&gt;
&lt;li&gt;Save your changes. &lt;/li&gt;
&lt;li&gt;Create a class library project that targets the .NET Framework 3.5. Add the following reference: 
&lt;ul&gt;
&lt;li&gt;Microsoft.Office.Tools.Common.v9.0 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add the existing Ribbon code file to the class library project. The code-behind file (for example, Ribbon1.Designer.cs) will be copied over automatically. &lt;/li&gt;
&lt;li&gt;Optionally, open the Ribbon file and the code-behind file in the editor and change the namespaces for the Ribbon class in the main Ribbon file and code-behind file (for example, to SharedRibbonLibrary or some other namespace that identifies your component). Be sure to open the files in the editor by right-clicking them and choosing View Code. Do not double-click the files; this will attempt to open the Ribbon designer, and will result in a designer error. &lt;/li&gt;
&lt;li&gt;Build the class library project. &lt;/li&gt;
&lt;li&gt;In a new/different Office project that targets the .NET Framework 3.5, add a reference to the class library project. &lt;/li&gt;
&lt;li&gt;In the ThisAddIn, ThisDocument, or ThisWorkbook class in the Office project, override CreateRibbonObjects as follows (the following code assumes you changed the namespace of the shared Ribbon to SharedRibbonLibrary).
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;override&lt;/span&gt; Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()&lt;br /&gt;{&lt;br /&gt;    &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Microsoft.Office.Tools.Ribbon.RibbonManager(&lt;br /&gt;        &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Microsoft.Office.Tools.Ribbon.OfficeRibbon[] { &lt;br /&gt;            &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; SharedRibbonLibrary.Ribbon1() });&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Add the following class to the project. This code lets you access the shared Ribbon customization by using Globals.Ribbons in your code.
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection&lt;br /&gt;{&lt;br /&gt;    &lt;span style="COLOR: #0000ff"&gt;internal&lt;/span&gt; SharedRibbonLibrary.Ribbon1 Ribbon1&lt;br /&gt;    {&lt;br /&gt;        get { &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;this&lt;/span&gt;.GetRibbon&amp;lt;SharedRibbonLibrary.Ribbon1&amp;gt;(); }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Now you can use Globals.Ribbons.Ribbon1 to access public items exposed by the shared Ribbon. For example:
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;private&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;void&lt;/span&gt; ThisAddIn_Startup(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    Globals.Ribbons.Ribbon1.button1.Click += &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; EventHandler&amp;lt;Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs&amp;gt;(button1_Click);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: #0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; sender, Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs e)&lt;br /&gt;{&lt;br /&gt;    System.Windows.Forms.MessageBox.Show(&lt;span style="COLOR: #006080"&gt;"it works!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Targeting the .NET Framework 4&lt;/h3&gt;
&lt;p&gt;If your Office projects target the .NET Framework 4, you&amp;rsquo;ll need to make a number of other changes to the Ribbon code. Here are the full instructions.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Visual Studio, open (or create) an Office project that targets the .NET Framework 4, and that targets an Office application that supports the Ribbon. &lt;/li&gt;
&lt;li&gt;Add a &lt;strong&gt;Ribbon (Visual Designer)&lt;/strong&gt; item to the project. &lt;/li&gt;
&lt;li&gt;Design your Ribbon customization. Be sure to set the &lt;strong&gt;Modifiers&lt;/strong&gt; property to &lt;strong&gt;Public&lt;/strong&gt; for any controls/tabs/groups that you want to be able to access in other Office projects. Also be sure to&amp;nbsp;set the &lt;strong&gt;RibbonType&lt;/strong&gt; property of the Ribbon to all Ribbon types you want to support in other Office projects that consume the shared Ribbon. For example, if you want to use the Ribbon customization in Excel and Word projects, set &lt;strong&gt;RibbonType&lt;/strong&gt; to Microsoft.Excel.Workbook and Microsoft.Word.Document. &lt;/li&gt;
&lt;li&gt;Save your changes. &lt;/li&gt;
&lt;li&gt;Create a class library project that targets the .NET Framework 4. Add the following references: 
&lt;ul&gt;
&lt;li&gt;Microsoft.Office.Tools &lt;/li&gt;
&lt;li&gt;Microsoft.Office.Tools.Common &lt;/li&gt;
&lt;li&gt;Microsoft.Office.Tools.Common.v4.0.Utilities &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add the existing Ribbon code file to the class library project. The code-behind file (for example, Ribbon1.Designer.cs) will be copied over automatically. &lt;/li&gt;
&lt;li&gt;Open the Ribbon file and code-behind file in the code editor by right-clicking them and choosing View Code. Do not double-click the files; this will attempt to open the Ribbon designer, and will result in a designer error. &lt;/li&gt;
&lt;li&gt;In the Ribbon code-behind file, change the constructor to the following.
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; Ribbon1(Microsoft.Office.Tools.Ribbon.RibbonFactory factory)&lt;br /&gt;&lt;br /&gt;    : &lt;span style="COLOR: #0000ff"&gt;base&lt;/span&gt;(factory)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    InitializeComponent();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;In Ribbon code-behind file, remove the ThisRibbonCollection class definition at the bottom of the file.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Optionally, change the namespaces for the Ribbon class in the main Ribbon file and code-behind file (for example, to SharedRibbonLibrary or some other namespace that identifies your component). &lt;/li&gt;
&lt;li&gt;Build the class library project. &lt;/li&gt;
&lt;li&gt;In a new/different Office project that targets the .NET Framework 4, add a reference to the class library project. &lt;/li&gt;
&lt;li&gt;In the ThisAddIn, ThisDocument, or ThisWorkbook class in the Office project, override CreateRibbonObjects as follows (the following code assumes you changed the namespace of the shared Ribbon to SharedRibbonLibrary).
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;override&lt;/span&gt; Microsoft.Office.Tools.Ribbon.IRibbonExtension[] CreateRibbonObjects()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt;        &lt;br /&gt;&lt;br /&gt;        SharedRibbonLibrary.Ribbon1(Globals.Factory.GetRibbonFactory()) };&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Add the following class to the project. This code lets you access the shared Ribbon customization by using Globals.Ribbons in your code.
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: #0000ff"&gt;internal&lt;/span&gt; SharedRibbonLibrary.Ribbon1 Ribbon1&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        get { &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;this&lt;/span&gt;.GetRibbon&amp;lt;SharedRibbonLibrary.Ribbon1&amp;gt;(); }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Now you can use Globals.Ribbons.Ribbon1 to access public items exposed by the shared Ribbon. For example:
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="COLOR: #0000ff"&gt;private&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;void&lt;/span&gt; ThisAddIn_Startup(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    Globals.Ribbons.Ribbon1.button1.Click += &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(button1_Click);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: #0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; sender, Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs e)&lt;br /&gt;{&lt;br /&gt;    System.Windows.Forms.MessageBox.Show(&lt;span style="COLOR: #006080"&gt;"it works!"&lt;/span&gt;);&lt;br /&gt;}&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10029152" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Ribbon/">Ribbon</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/McLean+Schofield/">McLean Schofield</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/NET+Framework+4/">NET Framework 4</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/NET+Framework+3-5/">NET Framework 3.5</category></item><item><title>Open XML Package Editor Power Tool for Visual Studio 2010 (Navneet Gupta)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/22/open-xml-package-editor-power-tool-for-visual-studio-2010.aspx</link><pubDate>Tue, 22 Jun 2010 19:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10028676</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10028676</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/22/open-xml-package-editor-power-tool-for-visual-studio-2010.aspx#comments</comments><description>&lt;p&gt;We are happy to announce that today we are releasing the Open XML Package Editor Power Tool for Visual Studio 2010 on &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/450a00e3-5a7d-4776-be2c-8aa8cec2a75b"&gt;Visual Studio Gallery&lt;/a&gt;. This Power Tool is a Visual Studio add-in that provides an easy way to parse and edit Open Packaging Conventions files, including Word, Excel and PowerPoint documents. This Power Tool enables you to do the following tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open any Open XML Package file or XPS Package file directly in Visual Studio 2010. &lt;/li&gt;
&lt;li&gt;Browse the contents of Package files in a tree view. &lt;/li&gt;
&lt;li&gt;Open any XML part directly in Visual Studio's rich XML editor. &lt;/li&gt;
&lt;li&gt;Add or remove parts and relationships directly in the user interface. &lt;/li&gt;
&lt;li&gt;Import and export part contents to and from files. &lt;/li&gt;
&lt;li&gt;Detect when a Package file that is opened in Visual Studio is modified externally. The Power Tool prompts user to reload the file without having to close any open XML part editors. &lt;/li&gt;
&lt;li&gt;Create new Office Packages from a set of templates using Visual Studio's File &amp;gt; New dialog. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This Power Tool was originally shipped for Visual Studio 2008 as part of &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46B6BF86-E35D-4870-B214-4D7B72B02BF9&amp;amp;displaylang=en"&gt;VSTO Power Tools v1.0.0.0&lt;/a&gt;. This new version for Visual Studio 2010 contains all the original features from the previous version and it works the same.&lt;/p&gt;
&lt;p&gt;Figure 1 shows the tree view that is provided when you open an Open XML Package file in Visual Studio.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/5826.image_5F00_19E33D5A.png"&gt;&lt;img height="463" width="509" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/7585.image_5F00_thumb_5F00_202A13E8.png" alt="image" border="0" title="image" class="wlDisabledImage" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Figure 1 &amp;ndash; Open XML Package treeview in Visual Studio&lt;/p&gt;
&lt;p&gt;When you double-click on any XML part in the file that is open in the tree view, that part is opened in the standard Visual Studio XML editor, as shown in Figure 2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/1234.image_5F00_1E794814.png"&gt;&lt;img height="349" width="512" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-28-94-metablogapi/8168.image_5F00_thumb_5F00_0F62693A.png" alt="image" border="0" title="image" class="wlDisabledImage" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Figure 2 - XML part open in the Visual Studio XML editor&lt;/p&gt;
&lt;p&gt;The Open XML Package Editor Power Tool for Visual Studio 2010 is available for download at &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/450a00e3-5a7d-4776-be2c-8aa8cec2a75b"&gt;Visual Studio Gallery&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10028676" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Navneet+Gupta/">Navneet Gupta</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Open+XML/">Open XML</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Editor/">Editor</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/PowerTool/">PowerTool</category></item><item><title>Troubleshoot VSTO Add-In Load Failures (Navneet Gupta)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/21/troubleshoot-vsto-add-in-load-failures-navneet-gupta.aspx</link><pubDate>Mon, 21 Jun 2010 22:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10028205</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10028205</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/21/troubleshoot-vsto-add-in-load-failures-navneet-gupta.aspx#comments</comments><description>&lt;p&gt;We have helped many developers in troubleshooting VSTO add-in load failures. Hamed has written a very &lt;a href="http://blogs.msdn.com/b/haahmadi/archive/2010/05/26/my-vsto-add-in-does-not-load.aspx"&gt;nice blog post&lt;/a&gt; explaining the basic steps to troubleshoot VSTO add-in load failures. Even if you have not faced this issue yet, I recommend reading the post because it contains basic information about Office add-ins that developers should know. &lt;/p&gt;
&lt;p&gt;Although every scenario is unique to itself; there are some common diagnostic steps that are repeated for every investigation. This &lt;a href="http://code.msdn.microsoft.com/vstotroubleshooter"&gt;PowerShell script&lt;/a&gt; complements Hamed&amp;rsquo;s blog and automates the troubleshooting steps; you may find it useful.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10028205" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/add_2D00_ins/">add-ins</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Navneet+Gupta/">Navneet Gupta</category></item><item><title>Creating an Add-in for Office 2007 and Office 2010 that "Lights Up" on Office 2010 (McLean Schofield)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/04/creating-an-add-in-for-office-2007-and-office-2010-that-quot-lights-up-quot-on-office-2010-mclean-schofield.aspx</link><pubDate>Fri, 04 Jun 2010 16:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10020120</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10020120</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/04/creating-an-add-in-for-office-2007-and-office-2010-that-quot-lights-up-quot-on-office-2010-mclean-schofield.aspx#comments</comments><description>&lt;p&gt;Managed&amp;nbsp;Office add-ins&amp;nbsp;traditionally have been able to run in the&amp;nbsp;targeted application&amp;nbsp;(the version of the application&amp;nbsp;whose PIAs the add-in references)&amp;nbsp;and in later versions of the application.&amp;nbsp;Therefore, if&amp;nbsp;you need to create a single VSTO add-in that can be run in multiple versions of an application, the typical guidance is to develop the add-in by using a project template for the oldest version of Office that you want to support. For example, if your add-in needs to work with Office 2003 and Office 2007, you should create an Excel 2003 add-in (by using VSTO 2005 SE with Visual Studio 2005, or by using Visual Studio 2008). &lt;/p&gt;
&lt;p&gt;However, this strategy has several inconveniences:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you want to test/debug/run the add-in on your development computer, you must have the earliest version of Office you are targeting installed. Since &lt;a href="http://blogs.msdn.com/b/andreww/archive/2007/06/08/why-is-vs-development-not-supported-with-multiple-versions-of-office.aspx"&gt;&lt;span style="color: #006666;"&gt;side-by-side installations of Office are not supported on the development computer for VSTO development&lt;/span&gt;&lt;/a&gt;,if you're targeting an older version of Office&amp;nbsp;this means that you cannot use the current version of Office on your development computer (for example, if you need to do some non-development work in Office).&lt;/li&gt;
&lt;li&gt;Your add-in is limited to using only those features that are available in the earliest version of Office that you are targeting. You can work around this by creating a different add-in for each version of the application you are targeting and refactoring any common business logic into a shared assembly, or by using &lt;a href="http://blogs.msdn.com/b/andreww/archive/2007/06/15/can-you-build-one-add-in-for-multiple-versions-of-office.aspx"&gt;more advanced&lt;/a&gt; (and unsupported) &lt;a href="http://blogs.msdn.com/b/andreww/archive/2008/06/03/add-ins-for-multiple-office-versions-without-pias.aspx"&gt;methods&lt;/a&gt;, but this adds to the complexity of the development and deployment process. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With Visual Studio 2010, this scenario gets better. If you target the .NET Framework 4, you can now create a single add-in that targets both Office 2007 and Office 2010, &lt;em&gt;and&lt;/em&gt; uses features that are available only to Office 2010 (this is the &amp;ldquo;lights up&amp;rdquo; part of the title of this blog). This is possible by virtue of the new &lt;em&gt;embedded interop types&lt;/em&gt; feature in Visual Studio 2010&amp;nbsp;(also sometimes referred to as &lt;a href="http://blogs.msdn.com/b/mshneer/archive/2010/01/29/nopia-blog-posts.aspx"&gt;&lt;span style="color: #006666;"&gt;no-PIA&lt;/span&gt;&lt;/a&gt; or by the related &lt;a href="http://msdn.microsoft.com/en-us/library/dd264728.aspx"&gt;&lt;span style="color: #006666;"&gt;/link&lt;/span&gt;&lt;/a&gt; compiler option). When you compile an add-in project that targets the .NET Framework 4, by default* the type information for all the PIA types referenced in the add-in code is embedded in the add-in assembly. At run time, this type information is used to resolve calls to the underlying COM type, rather than relying on type information in the PIAs. &lt;/p&gt;
&lt;p&gt;The most commonly touted benefit of this feature is that because the add-in is no longer tightly coupled with the PIAs at compile time, the &lt;a href="http://blogs.msdn.com/b/samng/archive/2010/01/24/the-pain-of-deploying-primary-interop-assemblies.aspx"&gt;&lt;span style="color: #006666;"&gt;PIAs are no longer necessary on end user computers&lt;/span&gt;&lt;/a&gt;.&amp;nbsp;However, this also&amp;nbsp;means that you can now create an add-in that targets Office 2010, and the add-in will also run in Office 2007. The one caveat is this: when the add-in is loaded in Office 2007, it can &lt;em&gt;use only those types/members that are available in Office 2007&lt;/em&gt;.&amp;nbsp;You can achieve this by using the &lt;span style="font-family: courier new,courier;"&gt;Application.Version&lt;/span&gt; property, and writing conditional code that uses an Office 2010-specific type/member only if the add-in is loaded in Office 2010. If the add-in is loaded in Office 2007, your code can do something else. &lt;/p&gt;
&lt;p&gt;The following example demonstrates this technique in a Word 2010 add-in project that targets the .NET Framework 4. If the add-in is loaded in Word 2010, the code adds a check box content control (this is a new type of content control that was introduced in Word 2010) to the beginning of the active document. If the add-in is loaded in Word 2007, then it instead adds a Windows Forms check box, since this type of control can be added to a document in either version of Word.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', Courier, Monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', Courier, Monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Globals.ThisAddIn.Application.ActiveDocument != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;    Word.Document activeDoc = Globals.ThisAddIn.Application.ActiveDocument;&lt;br /&gt;    activeDoc.Paragraphs[1].Range.InsertParagraphBefore();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; majorVersionString = Globals.ThisAddIn.Application.Version.Split(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;[] { &lt;span style="color: #006080;"&gt;'.'&lt;/span&gt; })[0];&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; majorVersion = Convert.ToInt32(majorVersionString);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (majorVersion &amp;gt;= 14)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;// Add a check box content control.  &lt;/span&gt;&lt;br /&gt;        Word.ContentControl checkBoxContentControl1 = activeDoc.ContentControls.Add(&lt;br /&gt;            Word.WdContentControlType.wdContentControlCheckBox, activeDoc.Paragraphs[1].Range); &lt;br /&gt;        checkBoxContentControl1.Checked = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (majorVersion &amp;gt;= 12)&lt;br /&gt;    {&lt;br /&gt;         &lt;span style="color: #008000;"&gt;// Add a Windows Forms check box. This code requires a reference to Microsoft.Office.Tools.v4.0.Utilities&lt;/span&gt;&lt;br /&gt;        Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(activeDoc);&lt;br /&gt;        Microsoft.Office.Tools.Word.Controls.CheckBox checkBox1 = vstoDoc.Controls.AddCheckBox(&lt;br /&gt;            vstoDoc.Paragraphs[1].Range, 15, 15, &lt;span style="color: #006080;"&gt;"checkBox1"&lt;/span&gt;);&lt;br /&gt;        checkBox1.Checked = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;Here&amp;rsquo;s another example that demonstrates this technique in an Outlook 2010 add-in that targets the .NET Framework 4. When the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.inspectorevents_10_event.pagechange.aspx"&gt;&lt;span style="color: #006666;"&gt;PageChange&lt;/span&gt;&lt;/a&gt; event of an Inspector is raised, this code uses the new &lt;a href="http://msdn.microsoft.com/en-us/library/ee691834.aspx"&gt;&lt;span style="color: #006666;"&gt;ActivateTab method in Office 2010&lt;/span&gt;&lt;/a&gt; to activate a custom Ribbon tab if the user navigated to a custom form region page. This code assumes the add-in project has a &lt;strong&gt;Ribbon (Visual Designer)&lt;/strong&gt; item named &lt;em&gt;Ribbon1&lt;/em&gt; that defines a custom tab named &lt;em&gt;MyCustomTab&lt;/em&gt;, and a &lt;strong&gt;Form Region&lt;/strong&gt; item (of &lt;a href="http://msdn.microsoft.com/en-us/library/bb386301.aspx#Adding"&gt;&lt;span style="color: #006666;"&gt;type Separate&lt;/span&gt;&lt;/a&gt;) named &lt;em&gt;MyCustomFormRegion.&lt;/em&gt; &lt;/div&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', Courier, Monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', Courier, Monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Inspector_PageChange(&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ActivePageName)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; majorVersionString = Globals.ThisAddIn.Application.Version.Split(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;[]{&lt;span style="color: #006080;"&gt;'.'&lt;/span&gt;})[0];&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; majorVersion = Convert.ToInt32(majorVersionString);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (majorVersion &amp;gt;= 14)&lt;br /&gt;    {&lt;br /&gt;        Outlook.Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();&lt;br /&gt;        Microsoft.Office.Tools.Ribbon.RibbonTab tabToActivate = Globals.Ribbons[inspector].Ribbon1.MyCustomTab;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Equals(ActivePageName, &lt;span style="color: #006080;"&gt;"MyCustomFormRegion"&lt;/span&gt;))&lt;br /&gt;        {&lt;br /&gt;            tabToActivate.RibbonUI.ActivateTab(tabToActivate.ControlId.ToString());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="csharpcode-wrapper" id="codeSnippetWrapper"&gt;
&lt;p&gt;Note that different Office applications apparently return differently formatted &lt;span style="font-size: small;"&gt;&lt;span style="font-family: courier new,courier;"&gt;Application.Version&lt;/span&gt;&lt;/span&gt; strings. For example, on my computer Word 2010 returns &amp;ldquo;14.0&amp;rdquo;, but Outlook 2010 returns &amp;ldquo;14.0.0.4374&amp;rdquo;. To deal with these differences in a consistent way, the code above uses &lt;span style="font-family: courier new,courier;"&gt;&lt;span style="font-size: small;"&gt;String.Split&lt;/span&gt;&lt;/span&gt; to extract the &amp;ldquo;major&amp;rdquo; version number out of this string (the number before the first period).&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;*This is the default behavior in projects that target the .NET Framework 4. If you change the &lt;strong&gt;Embed Interop Types&lt;/strong&gt; property of a PIA reference in your project from True to False, the type information for that PIA is no longer embedded, and the add-in will be effectively bound to the specific PIA (or a later version) that is referenced. In other words, a Word 2010 add-in cannot be loaded in Word 2007, etc.&lt;/p&gt;
&lt;p&gt;______________&lt;/p&gt;
&lt;p&gt;McLean Schofield&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10020120" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2007/">Office 2007</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/McLean+Schofield/">McLean Schofield</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/primary+interop+assemblies/">primary interop assemblies</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2010/">Office 2010</category></item><item><title>VSTO Performance: Ribbon Reflection (Stephen Peters)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/03/vsto-performance-ribbon-reflection.aspx</link><pubDate>Thu, 03 Jun 2010 16:18:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10019531</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10019531</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/03/vsto-performance-ribbon-reflection.aspx#comments</comments><description>&lt;p&gt;It is very easy to customize the Ribbon in your VSTO extension.&amp;#160; All you need to do is to add a Ribbon (Visual Designer) to your solution, and it will appear when your solution is run without needing to do any more work.&amp;#160; Behind the scenes, the VSTO runtime reflects through your entire addin assembly looking for Ribbon extensions to instantiate.&amp;#160; This reflection can cause a significant performance hit, especially on larger solutions.&lt;/p&gt;  &lt;p&gt;During an addin’s startup, the VSTO Runtime needs to discover and instantiate any user-created Ribbon extensions.&amp;#160; The runtime does this by calling CreateRibbonExtensibilityObject, which is implemented by VSTO in the addin base class.&amp;#160; It will then call CreateRibbonObjects, another method on the addin base class.&amp;#160; This implementation of CreateRibbonObjects will reflect over every type in the addin assembly looking for classes that implement Microsoft.Office.Tools.Ribbon.IRibbonExtension (4.0) or Microsoft.Office.Tools.Ribbon.OfficeRibbon (3.5), instantiating each one, and then returns these in an array.&lt;/p&gt;  &lt;p&gt;The performance hit comes from the reflection that happens in CreateRibbonObjects.&amp;#160; For simple VSTO addins, this isn’t very significant.&amp;#160; But if you link in a large library, then the reflector will pull in any types referenced in your assembly, and any types that those types reference, and so forth.&amp;#160; This can result in having to spend a lot of time reading these types from disk, and it is completely unavoidable.&amp;#160; &lt;/p&gt;  &lt;p&gt;In order to avoid this, we can override either of these two methods so that the default implementation of CreateRibbonObjects is not called.&amp;#160; If the addin has no ribbons, then it’s best to override CreateRibbonExtensibilityObject in order to execute as little code as possible.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;protected override &lt;/span&gt;Office.&lt;span style="color: #2b91af"&gt;IRibbonExtensibility 
    &lt;/span&gt;CreateRibbonExtensibilityObject()
{
    &lt;span style="color: blue"&gt;return null&lt;/span&gt;;
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;If your addin includes a Ribbon, then it’s better to override CreateRibbonObjects.&amp;#160; Note that if you are creating an addin for .Net 3.5, you’ll need to return OfficeRibbon[] instead of IRibbonExtension[].&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;font color="#000000"&gt;Microsoft.Office.Tools.Ribbon;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;protected override &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IRibbonExtension&lt;/span&gt;[] CreateRibbonObjects()
{
    &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IRibbonExtension&lt;/span&gt;[] { &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Ribbon1&lt;/span&gt;(), &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Ribbon2&lt;/span&gt;() };
}&lt;/pre&gt;

&lt;p&gt;In our perf lab, we ran some benchmarks using the method described &lt;a href="http://blogs.msdn.com/b/vancem/archive/2007/04/09/a-model-for-cold-startup-time-of-an-application-on-windows.aspx"&gt;in this blog entry&lt;/a&gt; to generate the numbers.&amp;#160; Of interest were two tests involving an Outlook addin that had a Form Region with a single WPF control, before and after removing the Ribbon reflection.&amp;#160; The results were that removing reflection saved over a second off of the cold startup time.&amp;#160; So if you have larger VSTO solutions you may want to try to this technique to speed up performance.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10019531" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Ribbon/">Ribbon</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Stephen+Peters/">Stephen Peters</category></item><item><title>Fixing Compile and Run Time Errors after Retargeting VSTO Projects to the .NET Framework 4 (McLean Schofield)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/06/02/fixing-compile-and-run-time-errors-after-retargeting-vsto-projects-to-the-net-framework-4-mclean-schofield.aspx</link><pubDate>Wed, 02 Jun 2010 22:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10019171</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10019171</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/06/02/fixing-compile-and-run-time-errors-after-retargeting-vsto-projects-to-the-net-framework-4-mclean-schofield.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;
&lt;p&gt;Now that Visual Studio 2010 is released, some of you might be itching to &lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/04/15/upgrading-vsto-projects-to-use-with-visual-studio-2010-navneet-gupta.aspx"&gt;&lt;span style="color: #006666;"&gt;upgrade your existing VSTO projects&lt;/span&gt;&lt;/a&gt; so that you can take advantage of the &lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/04/23/why-should-i-upgrade-from-net-framework-3-5-to-net-framework-4.aspx"&gt;&lt;span style="color: #006666;"&gt;new features in the .NET Framework 4 that improve the Office development experience&lt;/span&gt;&lt;/a&gt;. Or, you might have already started using Visual Studio 2010 to develop a VSTO project targets the .NET Framework 3.5, and now you want to switch over to the .NET Framework 4. The purpose of this post is to shed some light on scenarios where retargeting a VSTO project to the .NET Framework 4 can cause compile or run time errors in your project, and how to resolve these errors. &lt;/p&gt;
&lt;p&gt;Retargeting a VSTO project to the .NET Framework 4 is pretty straightforward. If you created your project in Visual Studio 2010, you can retarget the project in the project properties by following the instructions &lt;a href="http://msdn.microsoft.com/en-us/library/bb398202.aspx"&gt;&lt;span style="color: #006666;"&gt;here&lt;/span&gt;&lt;/a&gt;. If you are upgrading an existing project to Visual Studio 2010, you can choose to have the upgraded project target the .NET Framework 4 if the .NET Framework 3.5 is not installed on the computer; otherwise, you can always retarget it in the project properties later. For more information, see the &amp;ldquo;Retargeting During Project Upgrade&amp;rdquo; section in &lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/04/15/upgrading-vsto-projects-to-use-with-visual-studio-2010-navneet-gupta.aspx"&gt;&lt;span style="color: #006666;"&gt;this blog post&lt;/span&gt;&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;After you retarget your VSTO project, in many cases your work is done and you can jump right in and start writing code. However, for some projects &amp;ndash; including any project that uses the Ribbon designer, any Outlook project that has a form region, and Excel and Word projects that use certain features such as smart tags and the GetVstoObject/HasVstoObject methods &amp;ndash; you will get compile errors after you retarget the project, or the add-in might no longer run. In these scenarios, you must make some additional changes to your code. For the full list of scenarios that require code changes along with examples of the required changes, see the following MSDN articles: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee712617.aspx"&gt;&lt;span style="color: #006666;"&gt;Required Changes to Run Office Projects that You Migrate to the .NET Framework 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee712587.aspx"&gt;&lt;span style="color: #006666;"&gt;Updating Excel and Word Projects that You Migrate to the .NET Framework 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee712589.aspx"&gt;&lt;span style="color: #006666;"&gt;Updating Ribbon Customizations in Office Projects that You Migrate to the .NET Framework 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee712590.aspx"&gt;&lt;span style="color: #006666;"&gt;Updating Form Regions in Outlook Projects that You Migrate to the .NET Framework 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For step-by-step tutorials and &amp;ldquo;How do I?&amp;rdquo; videos that demonstrate several specific retargeting scenarios, see the following links: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vsto/ff623005.aspx"&gt;&lt;span style="color: #006666;"&gt;How Do I: Retarget an Outlook Add-In from .NET Framework 3.5 to .NET Framework 4?&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vsto/ff623010.aspx"&gt;&lt;span style="color: #006666;"&gt;How Do I: Retarget a Word 2007 Add-In from .NET Framework 3.5 to .NET Framework 4?&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/bethmassi/archive/2009/12/15/migrating-an-outlook-client-to-net-framework-4-in-visual-studio-2010.aspx"&gt;&lt;span style="color: #006666;"&gt;Migrating an Outlook Client to .NET Framework 4 in Visual Studio 2010 (Beth Massi)&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;When the VSTO team implemented support for the new &amp;ldquo;embedded interop types&amp;rdquo; feature (also sometimes referred to as &amp;ldquo;no-PIA&amp;rdquo;) of the .NET Framework 4, they had to also make some changes to the programming model of certain VSTO runtime features. For example, because the embedded interop types feature works only with interfaces, most types in the portion of the VSTO runtime that supports the .NET Framework 4 are now interfaces rather than classes. These and other changes have a trickle-down effect on some of the generated code and developer-written code in VSTO projects, and therefore require some manual code changes after you retarget a project. &lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in reading more about the embedded interop types feature in the .NET Framework 4 and the changes to the design of the Visual Studio 2010 Tools for Office runtime to support this feature, the following MSDN articles and blog posts. &lt;/p&gt;
&lt;p&gt;Blog posts: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/mshneer/archive/2010/03/10/design-of-vsto-2010-runtime.aspx"&gt;&lt;span style="color: #006666;"&gt;Design of VSTO 2010 runtime (Misha Shneerson)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/01/21/vsto-2010-runtime-components-explained-aaron-cathcart.aspx"&gt;&lt;span style="color: #006666;"&gt;VSTO 2010 Runtime components explained (Aaron Cathcart)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/04/23/why-should-i-upgrade-from-net-framework-3-5-to-net-framework-4.aspx"&gt;&lt;span style="color: #006666;"&gt;Why Should I Upgrade from .Net Framework 3.5 to .Net Framework 4? (Navneet Gupta)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/vsto/archive/2010/04/15/upgrading-vsto-projects-to-use-with-visual-studio-2010-navneet-gupta.aspx"&gt;&lt;span style="color: #006666;"&gt;Upgrading VSTO Projects to use with Visual Studio 2010 (Navneet Gupta)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MSDN articles: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee712588.aspx"&gt;&lt;span style="color: #006666;"&gt;Changes to the Design of Office Projects that Target the .NET Framework 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb608603.aspx"&gt;&lt;span style="color: #006666;"&gt;Visual Studio Tools for Office Runtime Overview&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/3295w01c.aspx"&gt;&lt;span style="color: #006666;"&gt;Designing and Creating Office Solutions&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10019171" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2007/">Office 2007</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/McLean+Schofield/">McLean Schofield</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2010/">Office 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Retargeting/">Retargeting</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/NET+Framework+4/">NET Framework 4</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/NET+Framework+3-5/">NET Framework 3.5</category></item><item><title>When Do I Need to Deploy the VSTO Runtime? (Mary Lee)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/05/13/when-do-i-need-to-deploy-the-vsto-runtime.aspx</link><pubDate>Thu, 13 May 2010 15:43:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10012567</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10012567</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/05/13/when-do-i-need-to-deploy-the-vsto-runtime.aspx#comments</comments><description>&lt;p&gt;Aaron wrote a great article about the &lt;a href="http://blogs.msdn.com/vsto/archive/2010/01/21/vsto-2010-runtime-components-explained-aaron-cathcart.aspx"&gt;VSTO runtime components&lt;/a&gt; earlier, which explained the Office extensions for .NET Framework 3.5 and Office extensions for .NET Framework 4. He also explained that starting in Microsoft Office 2010, the Visual Studio 2010 Tools for Office runtime is included and does not need to be deployed alongside your Office solution – BUT – (currently) only if you are targeting the .NET Framework 3.5.&lt;/p&gt;  &lt;p&gt;If you are targeting the .NET Framework 4, the Visual Studio 2010 Tools for Runtime must be selected in the Prerequisites Dialog Box and installed on end-user computers. This is because the Office extensions for .NET Framework 4 are not included in the Visual Studio 2010 Tools for Office runtime that is included in Microsoft Office 2010 Beta or RTM.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhenDoINeedtoDeploytheVSTORuntime_F8DA/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhenDoINeedtoDeploytheVSTORuntime_F8DA/image_thumb_1.png" width="610" height="476" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mary Lee, Programming Writer.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10012567" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/ClickOnce/">ClickOnce</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Mary+Lee/">Mary Lee</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Windows+Installer/">Windows Installer</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Deployment/">Deployment</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+14/">Office 14</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/NET+Framework+4/">NET Framework 4</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/NET+Framework+3-5/">NET Framework 3.5</category></item><item><title>Deploying the *.Utilities assemblies by using Windows Installer (Mary Lee)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/05/05/deploying-the-utilities-assemblies-by-using-windows-installer.aspx</link><pubDate>Wed, 05 May 2010 21:52:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10008092</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10008092</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/05/05/deploying-the-utilities-assemblies-by-using-windows-installer.aspx#comments</comments><description>&lt;p&gt;Office solutions for .NET Framework 4 have dependencies on files that are distributed in the Visual Studio 2010 Tools for Office runtime, but there are also files outside of the runtime that are required for Office solutions to run on end-user computers.&lt;/p&gt;  &lt;p&gt;These files are the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft.Office.Tools.Common.v4.0.Utilities.dll&lt;/li&gt;    &lt;li&gt;Microsoft.Office.Tools.Excel.v4.0.Utilities.dll&lt;/li&gt;    &lt;li&gt;Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll&lt;/li&gt;    &lt;li&gt;Microsoft.Office.Tools.Word.v4.0.Utilities.dll&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For some information about these Utilities assemblies, see &lt;a href="http://msdn.microsoft.com/en-us/library/ee712616.aspx"&gt;Assemblies in the Visual Studio Tools for Office Runtime&lt;/a&gt;.&amp;#160; For even more information, see &lt;a href="http://blogs.msdn.com/mshneer/archive/2010/03/10/design-of-vsto-2010-runtime.aspx"&gt;Design of VSTO 2010 runtime&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Once you add a Setup project to your Visual Studio solution and add the project output of the Office solution, the next step is usually to exclude all the detected dependencies.&amp;#160; However, you may find that your Office solution does not run on end-user computers. This is because the *.Utilities assemblies must be deployed to the end-user computer or the functionality provided by the interfaces defined in these assemblies must be re-implemented in your own assembly.&lt;/p&gt;  &lt;p&gt;To workaround this problem, make sure to not exclude the Utilities assemblies after the file is detected as a dependency.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/Dep.UtilitiesassembliesbyusingWindowsIns_C41F/clip_image002%5B6%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[6]" border="0" alt="clip_image002[6]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/Dep.UtilitiesassembliesbyusingWindowsIns_C41F/clip_image002%5B6%5D_thumb.jpg" width="366" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;All the other files are part of the Visual Studio 2010 Tools for Office runtime, so you do not need to deploy them with your Setup project.&lt;/p&gt;  &lt;p&gt;Check out the deployment FAQ at &lt;a title="http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/1666d2b0-a4d0-41e8-ad86-5eab3542de1e" href="http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/1666d2b0-a4d0-41e8-ad86-5eab3542de1e"&gt;http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/1666d2b0-a4d0-41e8-ad86-5eab3542de1e&lt;/a&gt;.&amp;#160; If you have additional questions about deployment, search for or post questions in the forum at &lt;a title="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads" href="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads"&gt;http://social.msdn.microsoft.com/Forums/en-US/vsto/threads&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mary Lee, Programming Writer.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10008092" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Mary+Lee/">Mary Lee</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Windows+Installer/">Windows Installer</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Deployment/">Deployment</category></item><item><title>Handling Sort and Filter Events in Excel (Navneet Gupta)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/05/03/handling-sort-and-filter-events-in-excel-navneet-gupta.aspx</link><pubDate>Mon, 03 May 2010 21:28:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10006653</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10006653</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/05/03/handling-sort-and-filter-events-in-excel-navneet-gupta.aspx#comments</comments><description>&lt;p&gt;Recently I helped two customers that were trying to solve this problem. They wanted to get notifications whenever Excel sorted or filtered data. This is not as easy as it sounds because Excel does not raise any events for sorting and filtering. &lt;/p&gt;  &lt;p&gt;I found two possible solutions, one of which requires much less coding but does not cover every possible scenario and another which requires a bit more code but covers all the scenarios we could think of. I thought I’d share my findings with you here in this post.&lt;/p&gt;  &lt;h4&gt;Waiting for the Calculate Event&lt;/h4&gt;  &lt;p&gt;Any changes in data/formulas in Excel sheet results in a Sheet_Change event immediately followed by Sheet_Calculate event. Sort and Filter raises just the Sheet_Calculate event. This means that all you need to do is handle this event and write a bit of code.&lt;/p&gt;  &lt;p&gt;So this would seem to solve our problem; wait for Sheet_Calculate event and see if it follows any Sheet_Change event and we are done. I was super excited after knowing this and thought that I found the solution. But I soon realized that if the user has turned on Manual Calculation mode then the Sheet_Calculate event is not fired until the user calculates manually. Also there isn’t a way to differentiate between Sort and Filter. In order to do that, we need to write a bit more code. &lt;/p&gt;  &lt;h4&gt;Repurposing Commands&lt;/h4&gt;  &lt;p&gt;What does this mean and how is it going to solve our problem?&lt;/p&gt;  &lt;p&gt;Almost every action in Excel (or any other Office App) that the user can perform via the UI is a command. For example, saving a file is the FileSave &lt;a&gt;command in the &lt;/a&gt;Excel object model. We can program Office applications to call a function we write for a given command. That way we can execute our custom code and then continue with the default behaviour.&lt;/p&gt;  &lt;p&gt;There are many useful articles and blogs on MSDN that talk about repurposing commands. References to the related articles are summarized below.&lt;/p&gt;  &lt;p&gt;In this post I am focusing on repurposing commands in Office 2007 and Office 2010, but we can repurpose commands in Office 2003 as well, although the method will be slightly different.. If you are interested in &lt;a href="http://blogs.msdn.com/jensenh/archive/2006/04/20/579867.aspx"&gt;how to repurpose commands in Office 2003 take a look at this post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I am assuming here that you have a basic understanding of customizing the Office Ribbon using Visual Studio. The MSDN series below goes into great depth for customizing the Fluent Ribbons (although these were written for Office 2007, they equally apply to Office 2010).&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa338202(v=office.12).aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa338199(v=office.12).aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (Part 2 of 3)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa722523(v=office.12).aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To repurpose a command, we will create a CustomUI in ribbon.xml and specify the commands we want to repurpose, then we will write functions to handle the command.&lt;/p&gt;  &lt;h5&gt;Ingredients&lt;/h5&gt;  &lt;p&gt;We will need the Control ID and Control Type of the commands we want to repurpose.&lt;/p&gt;  &lt;h6&gt;Control IDs&lt;/h6&gt;  &lt;p&gt;We will need control IDs of the commands to write the custon UI. The Microsoft Office team has documented all the Control IDs for every Office application; they can be downloaded for &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4329d9e9-4d11-46a5-898d-23e4f331e9ae&amp;amp;displaylang=en"&gt;Office 2007&lt;/a&gt; and &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3F2FE784-610E-4BF1-8143-41E481993AC6&amp;amp;displaylang=en"&gt;Office 2010&lt;/a&gt;. &lt;a href="http://office.microsoft.com/en-us/ork2000/HA011380611033.aspx"&gt;This article&lt;/a&gt; explains how you can find them from VBA.&lt;/p&gt;  &lt;p&gt;For a given command the control IDs are same across various versions of Microsoft Office. There can be multiple UI elements that can perform the same action and usually there is a separate control ID for each UI element.&lt;/p&gt;  &lt;h6&gt;Control Types&lt;/h6&gt;  &lt;p&gt;We will need the control type for the control IDs as well. The control type is used to find out the signature of the function used to repurpose a particular command. Declaring our function with wrong signature will not trigger any exceptions, Office will just not call our function and continue silently. Table 4 &lt;a href="http://msdn.microsoft.com/en-us/library/aa722523.aspx"&gt;this article explains the relationship between control types and function signatures&lt;/a&gt;. In this scenario we will be repurposing the button and toggleButton control types. Here are the function signatures for them.     &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top"&gt;           &lt;p&gt;button&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;&lt;b&gt;onAction&lt;/b&gt; – repurposed&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;C#: void OnAction(IRibbonControl control, ref bool CancelDefault)&lt;/p&gt;            &lt;p&gt;VBA: Sub OnAction(control As IRibbonControl, byRef CancelDefault)&lt;/p&gt;            &lt;p&gt;C++: HRESULT OnAction([in] IRibbonControl *pControl, [in,out] VARIANT _BOOL *fCancelDefault)&lt;/p&gt;            &lt;p&gt;Visual Basic: Sub OnAction(control As IRibbonControl, byRef CancelDefault)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top"&gt;           &lt;p&gt;toggleButton&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;&lt;b&gt;onAction - &lt;/b&gt;repurposed&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;C#: void OnAction(IRibbonControl control, bool pressed, ref bool cancelDefault)&lt;/p&gt;            &lt;p&gt;VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef cancelDefault)&lt;/p&gt;            &lt;p&gt;C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed, [in,out] VARIANT _BOOL *fCancelDefault)&lt;/p&gt;            &lt;p&gt;Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef CancelDefault)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;Below are the Control IDs for sort and filter commands.    &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;&lt;a name="_GoBack"&gt;&lt;/a&gt;&lt;b&gt;Control ID&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;&lt;b&gt;Control Type&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;Filter&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;toggleButton&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;AdvancedFilterDialog&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;Button&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;FilterReapply&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;Button&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;SortDialog&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;button&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;SortAscendingExcel&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;button&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;SortDescendingExcel&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="164"&gt;           &lt;p&gt;button&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;h5&gt;The Recipe&lt;/h5&gt;  &lt;p&gt;1. Add a Ribbon(XML) Item to the Project by right clicking on the Project in Solution Explorer and selecting Add Item … &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/760c1db58722_C86C/image_6.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/760c1db58722_C86C/image_thumb_2.png" width="669" height="464" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Double click the Ribbon1.xml in Solution Explorer to Open it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/760c1db58722_C86C/ribbon1_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="ribbon1" border="0" alt="ribbon1" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/760c1db58722_C86C/ribbon1_thumb.jpg" width="686" height="351" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. Remove the &amp;lt;ribbon&amp;gt; element and all of its child elements from Ribbon1.xml&lt;/p&gt;  &lt;p&gt;4. The CustomUI schema provides &amp;lt;commands&amp;gt; elements to specify commands in Office Fluent UI.&lt;/p&gt;  &lt;p&gt;The command element needs two attributes idMso and onAction attribute. idMso is the Control ID and onAction is the function that needs to be called when this command executes.&lt;/p&gt;  &lt;p&gt;Below is the sample xml for various Sort and Filter commands.&lt;/p&gt;  &lt;pre&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;lt;customUI xmlns=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot; onLoad=&amp;quot;Ribbon_Load&amp;quot;&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160; &amp;lt;commands&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--Repurpose Sort Commands--&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;SortAscendingExcel&amp;quot; onAction=&amp;quot;CustomSortAscendingExcel&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;SortDescendingExcel&amp;quot; onAction=&amp;quot;CustomSortDescendingExcel&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;SortCustomExcel&amp;quot; onAction=&amp;quot;CustomSortCustomExcel&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;SortDialog&amp;quot; onAction=&amp;quot;CustomSortDialog&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- Repurpose Filter Commands --&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;Filter&amp;quot; onAction=&amp;quot;CustomFilter&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;AdvancedFilterDialog&amp;quot; onAction=&amp;quot;CustomAdvancedFilterDialog&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;command idMso=&amp;quot;FilterReaply&amp;quot; onAction=&amp;quot;CustomFilterReaply&amp;quot;/&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;#160; &amp;lt;/commands&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;lt;/customUI&amp;gt;&lt;/pre&gt;

&lt;p&gt;5. The only thing remaining is to write the function implementation. Below is sample implementation of onAction handlers for Sort commands. &lt;/p&gt;

&lt;p&gt;Implementing every onAction in a separate function helps a lot during debugging. You can move common code into a separate function though. If you set the cancel parameter of the called function to false, Excel will execute the default implementation of that command after calling your function. This way you can just hook into user actions to know that user has executed the command and let Excel do the actual work. You write these functions in the Ribbon1 code-behind file. For instance, in C# the code would be:&lt;/p&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void CustomSortAscendingExcel(IRibbonControl control, ref bool cancel)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Office.Interop.Excel.Range rngSelection = null;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rngSelection = Globals.ThisWorkbook.Application.Selection as Microsoft.Office.Interop.Excel.Range;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != rngSelection)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //TODO: Custom Logic here&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void CustomSortDescendingExcel(IRibbonControl control, ref bool cancel)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Office.Interop.Excel.Range rngSelection = null;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rngSelection = Globals.ThisWorkbook.Application.Selection as Microsoft.Office.Interop.Excel.Range;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != rngSelection)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //TODO: Custom Logic here&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/pre&gt;

&lt;pre&gt;&amp;#160;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void CustomSortCustomExcel(IRibbonControl control, ref bool cancel)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Office.Interop.Excel.Range rngSelection = null;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rngSelection = Globals.ThisWorkbook.Application.Selection as Microsoft.Office.Interop.Excel.Range;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != rngSelection)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Perform sort&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Globals.ThisWorkbook.Application.Dialogs[Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogSort].Show();&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rngSelection.Select();&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void CustomSortDialog(IRibbonControl control, ref bool cancel)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Office.Interop.Excel.Range rngSelection = null;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rngSelection = Globals.ThisWorkbook.Application.Selection as Microsoft.Office.Interop.Excel.Range;&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != rngSelection)&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Perform sort&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Globals.ThisWorkbook.Application.Dialogs[Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogSort].Show();&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rngSelection.Select();&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;pre&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

&lt;p&gt;I hope that this post will help you in repurposing commands in Office., In the beginning repurposing looks very difficult to do but once you have everything required to repurpose a command it is a piece of cake. Also note that Excel will call your function whenever a command executes until your customization is loaded. Repurposing is not limited to Excel you can apply it to any Office application.&lt;/p&gt;

&lt;h4&gt;References&lt;/h4&gt;

&lt;p&gt;For more information see:&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/bb462633.aspx"&gt;Temporarily Repurpose Commands on the Office Fluent Ribbon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4329d9e9-4d11-46a5-898d-23e4f331e9ae&amp;amp;displaylang=en"&gt;Office 2007 Control IDs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3F2FE784-610E-4BF1-8143-41E481993AC6&amp;amp;displaylang=en"&gt;Office 2010 Control IDs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://office.microsoft.com/en-us/ork2000/HA011380611033.aspx"&gt;Find Control IDs from VBA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa338202(v=office.12).aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa338199(v=office.12).aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (Part 2 of 3)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa722523(v=office.12).aspx"&gt;Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10006653" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Ribbon/">Ribbon</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Navneet+Gupta/">Navneet Gupta</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Filtering/">Filtering</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Sorting/">Sorting</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/MSO+IDs/">MSO IDs</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Repurposing/">Repurposing</category></item><item><title>Why Should I Upgrade from .Net Framework 3.5 to .Net Framework 4 ? (Navneet Gupta)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/04/23/why-should-i-upgrade-from-net-framework-3-5-to-net-framework-4.aspx</link><pubDate>Fri, 23 Apr 2010 18:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10001684</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=10001684</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/04/23/why-should-i-upgrade-from-net-framework-3-5-to-net-framework-4.aspx#comments</comments><description>&lt;P&gt;I was chatting with some of my friends about Visual Studio 2010 and .Net Framework 4 and they asked me why should they move their application to .Net Framework 4, I am answering the question here for everybody to benefit. Frankly speaking there is no definitive answer; it is like there is no single pill that can cure all the problems. It all depends upon the application features and customer scenario.&lt;/P&gt;
&lt;P&gt;Here is the summary of major advantages of targeting .Net Framework 4 and other reasons why you may decide to stick to .Net Framework 3.5 for time being. I am writing this post keeping in mind the VSTO developers but most of this applies to any managed application.&lt;/P&gt;
&lt;P&gt;.Net Framework 4 comes with lots of cool features and many of them were developed keeping an Office developer in mind. &lt;A href="http://msdn.microsoft.com/en-us/library/dd409230(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd409230(VS.100).aspx"&gt;Check out this article for all the new features in .Net Framework 4&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Here is the list which I feel will interest the Office developers the most.&lt;/P&gt;
&lt;P&gt;Deploying pre-requisites for Office customizations have been a major pain point for many VSTO developers. Two new features in .Net Framework 4 address deployment of pre-requisites very well.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Size of .Net Framework&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The size of the .Net Framework redistributable is greatly reduced, the table below summarizes the difference between .Net Framework 3.5 SP1 and .Net Framework 4. 
&lt;TABLE border=1 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;&lt;B&gt;3.5 SP1&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;&lt;B&gt;4.0 RTM&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;
&lt;P&gt;&lt;B&gt;32 bit Client Profile&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;Online: 28 MB &lt;BR&gt;Offline: 255MB&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;28.8 MB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;
&lt;P&gt;&lt;B&gt;32 + 64 bit Client Profile&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;N/A&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;41 MB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;
&lt;P&gt;&lt;B&gt;32 bit Full&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;N/A&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;35.3 MB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;
&lt;P&gt;&lt;B&gt;32 + 64 bit Full&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;N/A&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;48.1 MB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;
&lt;P&gt;&lt;B&gt;32 + ia64 bit Full&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;N/A&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;51.7 MB&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=219&gt;
&lt;P&gt;&lt;B&gt;32 + 64 + ia64 bit Full&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=117&gt;
&lt;P&gt;231 MB&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=114&gt;
&lt;P&gt;N/A&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;Here is the above data in chart format.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhyShouldIUpgradefrom.NetF.NetFramework4_A479/clip_image001_2.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhyShouldIUpgradefrom.NetF.NetFramework4_A479/clip_image001_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image001 border=0 alt=clip_image001 src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhyShouldIUpgradefrom.NetF.NetFramework4_A479/clip_image001_thumb.png" width=468 height=284 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhyShouldIUpgradefrom.NetF.NetFramework4_A479/clip_image001_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As it is very clear from above table and chart that the size is greatly reduced for the redistributables. The web installers for .Net Framework 4 are under 1 MB in size (they require active internet connection to download the bits).&lt;/P&gt;
&lt;P&gt;This is great enhancement; almost all Office applications will only require .Net Framework 4 Client profile. &lt;A&gt;&lt;/A&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc656912.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc656912.aspx"&gt;This article explains .Net Framework 4 Client profile.&lt;/A&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/jgoldb/archive/2010/04/12/what-s-new-in-net-framework-4-client-profile-rtm.aspx" mce_href="http://blogs.msdn.com/jgoldb/archive/2010/04/12/what-s-new-in-net-framework-4-client-profile-rtm.aspx"&gt;This blog&lt;/A&gt; shads more light on .Net Framework 4 Client Profile.&lt;/P&gt;
&lt;P&gt;The .NET Framework 4 Client Profile does not include the following features. You must install the .NET Framework 4 to use these features in your application:&lt;/P&gt;
&lt;P&gt;· ASP.NET&lt;/P&gt;
&lt;P&gt;· Advanced Windows Communication Foundation (WCF) functionality&lt;A title=_GoBack name=_GoBack&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;· .NET Framework Data Provider for Oracle&lt;/P&gt;
&lt;P&gt;· MSBuild for compiling&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Type Embedding and Type Equivalence&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Another major concern related to deployment of Office customizations was deployment of Primary Interop Assemblies (PIAs). Before .NET Framework 4 if the customization only used some of the interfaces and methods from the Interop Assemblies, the complete set of the Primary Interop Assemblies still had to be deployed. .Net Framework 4 addresses this in very elegant way. The C# and VB compilers provide a /link switch that embeds the types referenced from the Primary Interop Assemblies into the application assembly itself. , Type Equivalence in the CLR can understand these embedded types and link them to the appropriate types at runtime. With this the customization does not require deployment of the Primary Interop Assemblies on end-user computers.&lt;/P&gt;
&lt;P&gt;For more information about Type Embedding and Type Equivalence refer these blog posts. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/samng/archive/2010/01/24/the-pain-of-deploying-primary-interop-assemblies.aspx" mce_href="http://blogs.msdn.com/samng/archive/2010/01/24/the-pain-of-deploying-primary-interop-assemblies.aspx"&gt;The Pain of deploying Primary Interop Assemblies&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee317478.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ee317478.aspx"&gt;Walkthrough: Embedding Type Information from Microsoft Office Assemblies (C# and Visual Basic)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;VSTO Runtime Improvements&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;There have been some major improvements in VSTO Runtime 4.0 for the customizations that target .Net Framework 4. These enhancements were possible because of Type Embedding and Type Equivalence features of the compilers and CLR. &lt;/P&gt;
&lt;P&gt;At a high level the VSTO Runtime has three major components; Unmanaged Components, Office Runtime 3.5 Extensions and Office Runtime 4.0 Extensions. Office Runtime 3.5 Extensions are used by the Office customizations that target .Net Framework 3.5 and Office Runtime 4.0 Extensions are used by the Office Customizations that target .Net Framework 4. &lt;U&gt;&lt;A href="http://blogs.msdn.com/vsto/archive/2010/01/21/vsto-2010-runtime-components-explained-aaron-cathcart.aspx#9999822" mce_href="http://blogs.msdn.com/vsto/archive/2010/01/21/vsto-2010-runtime-components-explained-aaron-cathcart.aspx#9999822"&gt;This blog post explains the runtime extensions in detail.&lt;/A&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;The Office runtime 3.5 Extensions use the &lt;A href="http://msdn.microsoft.com/en-us/library/bb384200.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb384200.aspx"&gt;Managed AddIn Framework (MAF)&lt;/A&gt; to load the customization and to establish a communication link between the host application and the customization. MAF provides lots of benefits in terms of flexibility and version control, but it comes with some performance bottlenecks and implementation related design issues because of long chain of assemblies in &lt;A href="http://msdn.microsoft.com/en-us/library/bb384200.aspx#addin_model" mce_href="http://msdn.microsoft.com/en-us/library/bb384200.aspx#addin_model"&gt;MAF Pipeline&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Office runtime 4.0 extensions were developed using Type Embedding and Type Equivalence and we do not require MAF anymore, this improves customization loading time and our ability to provide future enhancements to the runtime at much lower cost. &lt;U&gt;&lt;A href="http://blogs.msdn.com/mshneer/archive/2010/03/10/design-of-vsto-2010-runtime.aspx" mce_href="http://blogs.msdn.com/mshneer/archive/2010/03/10/design-of-vsto-2010-runtime.aspx"&gt;This blog post explains the design of the VSTO runtime in detail&lt;/A&gt;&lt;/U&gt;.&lt;/P&gt;
&lt;P&gt;In addition to these features, there are other enhancements you will benefit from like &lt;A href="http://msdn.microsoft.com/en-us/magazine/ee819091.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/ee819091.aspx"&gt;In-Process Side by Side&lt;/A&gt; and &lt;A href="http://blogs.msdn.com/clrcodegeneration/archive/2009/05/03/Improvements-to-NGen-in-.NET-Framework-4.aspx" mce_href="http://blogs.msdn.com/clrcodegeneration/archive/2009/05/03/Improvements-to-NGen-in-.NET-Framework-4.aspx"&gt;Improvements to NGen in .NET Framework 4&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Hopefully by now you are sold on targeting your solutions to .Net Framework 4 &lt;IMG class="wlEmoticon wlEmoticon-smile" alt=Smile src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhyShouldIUpgradefrom.NetF.NetFramework4_A479/wlEmoticon-smile_2.png" mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/WhyShouldIUpgradefrom.NetF.NetFramework4_A479/wlEmoticon-smile_2.png"&gt;.&lt;/P&gt;
&lt;P&gt;There are also some changes that come with Windows 7 and Office 2010 that may affect your decision. Windows 7 now comes pre-loaded with .Net Framework 3.5 SP1; it benefits the developers who create customizations that target .Net Framework 3.5 SP1 because this pre-requisite is taken care of with its inclusion in the operating system. Additionally, the Office Runtime 3.5 extensions are bundled with Office 2010, and they are automatically activated if the users have .Net Framework 3.5 SP1 installed on their machines, check &lt;A href="http://blogs.msdn.com/vsto/archive/2010/01/21/vsto-2010-runtime-components-explained-aaron-cathcart.aspx#9999822" mce_href="http://blogs.msdn.com/vsto/archive/2010/01/21/vsto-2010-runtime-components-explained-aaron-cathcart.aspx#9999822"&gt;this blog post&lt;/A&gt; for details.&lt;/P&gt;
&lt;P&gt;Hopefully this information will help you in making a more informed decision for targeting the appropriate .Net Framework version for your application.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;Update: &lt;/STRONG&gt;I was helping a customer with one of their Excel AddIn project and that reminded me another benefit of moving the VSTO Excel customization to .Net Framework 4.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt"&gt;All VSTO Excel solutions that target .Net Framework 3.5 SP1 or earlier use a locale proxy to solve a bug in Excel (&lt;A href="http://support.microsoft.com/kb/320369"&gt;&lt;FONT color=#0000ff&gt;http://support.microsoft.com/kb/320369&lt;/FONT&gt;&lt;/A&gt;) , this proxy adds performance overhead for each Interop call to Excel. Check out &lt;A href="http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx"&gt;How VSTO solves the Excel LCID or Locale issue in the June CTP build&lt;/A&gt; for details.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt"&gt;VSTO Excel Customizations that target .Net Framework 4 do not need the local proxy and this improves the performance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10001684" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Deployment/">Deployment</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/primary+interop+assemblies/">primary interop assemblies</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/-NET+Framework+Client+Profile/">.NET Framework Client Profile</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/migration/">migration</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/add_2D00_ins/">add-ins</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+14/">Office 14</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2010/">Office 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Retargeting/">Retargeting</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Navneet+Gupta/">Navneet Gupta</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Excel+Locale+Proxy/">Excel Locale Proxy</category></item><item><title>Upgrading VSTO Projects to use with Visual Studio 2010 (Navneet Gupta)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/04/15/upgrading-vsto-projects-to-use-with-visual-studio-2010-navneet-gupta.aspx</link><pubDate>Thu, 15 Apr 2010 17:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9996637</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=9996637</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/04/15/upgrading-vsto-projects-to-use-with-visual-studio-2010-navneet-gupta.aspx#comments</comments><description>&lt;P&gt;The first thing that you notice after opening your existing projects in Visual Studio 2010 is the very familiar Visual Studio Conversion wizard. Internally we call it Project Migration wizard. Personally I love this wizard because of its simplicity, my converted projects are only few clicks away. In this post I’ll walk through this wizard and tell you what’s happening behind the scenes. &lt;/P&gt;
&lt;H4&gt;Introduction&lt;/H4&gt;
&lt;P&gt;There is very useful information shown on the first page of the wizard. This information is very similar to what was on Visual Studio 2008 version. I have the screen shot below and I can bet that most of you will not read the entire statement. I have been using Visual Studio since Visual Studio 6.0 and never read this myself until I joined this team and started owning Project Migration J. Personally I would have written this as bulleted list. Here is my version of the information.&lt;/P&gt;
&lt;P&gt;1. You see this wizard if this project was created in previous versions of VS, or if you upgraded your copy of Microsoft Office.&lt;/P&gt;
&lt;P&gt;* The second part of above statement is very interesting in VSTO scenarios, I will elaborate that later.&lt;/P&gt;
&lt;P&gt;2. Once you convert this project to Visual Studio 2010, you may not be able to use it with earlier versions of Visual Studio, better take backups J&lt;/P&gt;
&lt;P&gt;3. We will checkout the project files automatically if the project is under source control and provided this machine is configured properly to use source control.&lt;/P&gt;
&lt;P&gt;4. If the project is not under source control remove the read only attribute from the files and folders.&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb.png" width=244 height=192 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb.png"&gt;&lt;/A&gt; 
&lt;H4&gt;Backup&lt;/H4&gt;
&lt;P&gt;The second step in the wizard gives us a chance to backup existing source files. We highly recommend taking a backup so that’s why we select the option by default. If you click Finish on the previous page, we would take the backup by default. By default we create a folder named “Backup” under the project directory and store the backup there.&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_1.png" width=244 height=192 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_1.png"&gt;&lt;/A&gt; 
&lt;H4&gt;Confirm&lt;/H4&gt;
&lt;P&gt;The next step of upgrade process will tell you what we are going to do with your project. Again here is my bulleted list of what is written there.&lt;/P&gt;
&lt;P&gt;1. We will checkout the files automatically, please make sure that the source control is configured properly on the machine.&lt;/P&gt;
&lt;P&gt;2. We will upgrade the project to the currently installed version of Office. If you do not want to upgrade this uncheck “Always upgrade to installed version of Office” option on the “Office Tools” section of the Tools | Options dialog.&lt;/P&gt;
&lt;P&gt;· Note that you can upgrade the Add-Ins even if you do not have any version of Microsoft Office installed on the machine.&lt;/P&gt;
&lt;P&gt;· VSTO in Visual Studio 2010 does not support Office 2003 so we upgrade to Office 2007 format by default.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update: &lt;/STRONG&gt;Please note that it is still possible to create Office 2003 Shared AddIns in Visual Studio 2010, Misha has a nice blog about the COM Shim wizard being upgraded to use with VS 2010&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://blogs.msdn.com/mshneer/archive/2010/03/19/com-shim-wizards-for-vs-2010.aspx"&gt;http://blogs.msdn.com/mshneer/archive/2010/03/19/com-shim-wizards-for-vs-2010.aspx&lt;/A&gt;&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_6.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_2.png" width=244 height=192 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_2.png"&gt;&lt;/A&gt; 
&lt;H4&gt;Done&lt;/H4&gt;
&lt;P&gt;Once you click Finish we start upgrading the project to Visual Studio 2010 format. Once this is converted, you will get the final page of this wizard. If there were any errors during upgrade the conversion log checkbox will be checked by default.&lt;/P&gt;
&lt;P&gt;If you do not have .Net Framework 3.5 SP1 installed on the machine the project migration will go through an extra step which I will explain later in “Retargeting During Project Upgrade” section below.&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_8.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_3.png" width=244 height=192 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_3.png"&gt;&lt;/A&gt; 
&lt;P&gt;If you check the checkbox then the Conversion Report will display as shown below. It is clear from the report below that we touch only the .sln and .csproj/.vbproj files during project upgrade.&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_10.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_4.png" width=244 height=102 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_4.png"&gt;&lt;/A&gt; 
&lt;H4&gt;Retargeting During Project Upgrade&lt;/H4&gt;
&lt;P&gt;If the machine does not have .Net Framework 3.5 SP1 installed, the Project Migration wizard will ask you to either download .Net Framework 3.5 SP1 or to retarget the project to .Net Framework 4.&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_12.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_5.png" width=244 height=193 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_5.png"&gt;&lt;/A&gt; 
&lt;P&gt;If you choose to download .Net Framework 3.5 SP1 the solution and project file will be upgraded to Visual Studio 2010 compatible format and the project will be unloaded in the Solution Explorer. After downloading .Net Framework 3.5 SP1 you can right click on the project in Solution Explorer and select Reload Project.&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_14.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 20px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_6.png" width=244 height=196 mce_src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/b2b085719ad1_8E64/image_thumb_6.png"&gt;&lt;/A&gt; 
&lt;P&gt;Please keep few things in mind when you choose to retarget the project to .Net Framework 4, this is a big decision; it comes with lots of power and with power comes lots of responsibilities. The major benefit of switching to .Net Framework 4 for VSTO solutions is the use of &lt;A href="http://msdn.microsoft.com/en-us/library/dd997297(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd997297(VS.100).aspx"&gt;Type Embedding&lt;/A&gt; in VSTO Runtime. Once you retarget the solution to .Net Framework 4 all the referenced Primary Interop Assemblies will be embedded into the customization assembly and the end users will no longer need to install Microsoft Office Primary Interop Assemblies on their machines to run this customization.&lt;/P&gt;
&lt;P&gt;There is &lt;A href="http://msdn.microsoft.com/en-us/vsto/ee207231(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/vsto/ee207231(VS.100).aspx"&gt;a nice MSDN article&lt;/A&gt; which explains this, so be sure to go through it before deciding to switch to .Net Framework 4. Be aware that you may need to change some code as we have changed the programming model a bit. Take a look at some of the &lt;A href="http://msdn.microsoft.com/en-us/vsto/dd164303.aspx#Office2010" mce_href="http://msdn.microsoft.com/en-us/vsto/dd164303.aspx#Office2010"&gt;How Do I videos we have on the VSTO Dev Center&lt;/A&gt; that explain how to migrate projects.&lt;/P&gt;
&lt;P&gt;Note: If you are upgrading a document level customization that targets Office 2003 you may need to install Visual Studio for Office Runtime Second Edition on developer machine before upgrading the project due to a known compatibility break we found while designing Visual Studio for Office Runtime 3.0 during the Visual Studio 2008 timeframe. &lt;A href="http://msdn.microsoft.com/en-us/library/k2xkefex(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/k2xkefex(VS.100).aspx"&gt;Check “Upgrading Microsoft Office 2003 Projects” section of this article for more details&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;So I hope that this post helps explain what is happening behind the scenes when you migrate your Office solutions to Visual Studio 2010.&lt;/P&gt;
&lt;P&gt;You may find following articles useful while migrating projects to Visual Studio 2010.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/k2xkefex(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/k2xkefex(VS.100).aspx"&gt;Upgrading and Migrating Office Solutions&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee207231(v=VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ee207231(v=VS.100).aspx"&gt;Migrating Office Solutions to the .NET Framework 4&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/bb625070(v=VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb625070(v=VS.100).aspx"&gt;Project Upgrade, Options Dialog Box&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Have fun.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9996637" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/migration/">migration</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Retargeting/">Retargeting</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Navneet+Gupta/">Navneet Gupta</category></item><item><title>Using Team Build with VSTO – Made Easier! (Tobi Kral, Aaron Cathcart)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/04/13/using-team-build-with-vsto-made-easier-tobi-kral-aaron-cathcart.aspx</link><pubDate>Tue, 13 Apr 2010 21:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9995441</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=9995441</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/04/13/using-team-build-with-vsto-made-easier-tobi-kral-aaron-cathcart.aspx#comments</comments><description>&lt;P&gt;On Monday, the VSTO team released a Whitepaper documenting how to get your VSTO customizations building in a Team Build environment. No longer will you need to install Visual Studio on your build machine in order to accommodate building VSTO projects. You can view the Whitepaper here: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;A href="http://msdn.microsoft.com/en-us/vsto/ff624126.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vsto/ff624126.aspx"&gt;How to Build Visual Studio 2010 Office Development Projects with TFS Team Build 2010&lt;/A&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;As the whitepaper describes, configuring a build machine to build VSTO projects requires installing some prerequisites and making sure certain resources are in place. There's nothing particularly difficult about the steps, but there are enough assemblies and registry keys that have to be added to the build machine that it's pretty easy to miss one or two when doing it manually. (Really, we're speaking from experience on this one.) To streamline the process, we've found it helpful to use some scripts to take care of the nit-picky detail work.&lt;/P&gt;
&lt;P&gt;There are two scripts we've been using, one to gather the required resources, and one to copy everything to the appropriate location on the build machine. There are sample scripts linked below, but first we'll quickly run through how the two scripts work.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;CreateVSTOPayload.bat: &lt;/B&gt;This is the script that gathers the resources, and it needs to be run on a computer that has Visual Studio 2010 Professional (or better) installed. When executed, the script will create a "Payload" directory and copy the assemblies and target files to it.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;InstallVSTOPayload.bat:&lt;/B&gt; This is the script that, when executed on the build machine,&amp;nbsp; will install the resources gathered by CreateVSTOPayload. For the script to work, it requires the "Payload" directory created above as well as a couple of registry files (we have registry files published next to this batch script). Since the script is adding things to protected locations, it is necessary to run it from an elevated command prompt.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sample Scripts &lt;BR&gt;&lt;/STRONG&gt;You can find the sample scripts up on Code Gallery here: &lt;A title=http://code.msdn.microsoft.com/vstoteambuildscripts href="http://code.msdn.microsoft.com/vstoteambuildscripts" mce_href="http://code.msdn.microsoft.com/vstoteambuildscripts"&gt;http://code.msdn.microsoft.com/vstoteambuildscripts&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;While these scripts have been working for us, please note that it’s possible you’ll need to do a little tweaking.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Note: For the reg files on Code Gallery if you are using a 64-bit build machine you will need to use the Wow6432Node subkey. For example replace all instances of &lt;STRONG&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft&lt;/STRONG&gt; with &lt;STRONG&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft&lt;/STRONG&gt;.&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9995441" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/build+process/">build process</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Aaron+Cathcart/">Aaron Cathcart</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Tobi+Kral/">Tobi Kral</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Team+Build/">Team Build</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/TFS/">TFS</category></item><item><title>Visual Studio 2010 RTM! New Resources, Samples, Videos, + more (Beth Massi)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/04/12/visual-studio-2010-rtm-new-resources-samples-videos-more-beth-massi.aspx</link><pubDate>Mon, 12 Apr 2010 21:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9994697</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=9994697</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/04/12/visual-studio-2010-rtm-new-resources-samples-videos-more-beth-massi.aspx#comments</comments><description>&lt;p&gt;Whooo hooooo! It’s been ~2 years in the making but &lt;a href="http://www.microsoft.com/visualstudio/en-us/download" target="_blank"&gt;Visual Studio 2010 has been released&lt;/a&gt;! This is my first full product cycle since I started Microsoft and oh what a ride! I’ve been &lt;a href="http://channel9.msdn.com/posts/NicFill/Channel-9-Live-at-Visual-Studio-2010-and-Silverlight-4-Launch/" target="_blank"&gt;watching live interviews from the Vegas launch event all day on Channel 9&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’m really pumped about all the awesome resources that we’ve put together for you for launch and I’m looking forward to continuing to share my knowledge on how to build awesome business applications with Visual Studio 2010. It’s going to be a really fun year! Here are some of the plentiful resources to check out…&lt;/p&gt;  &lt;h3&gt;Developer Center&lt;/h3&gt;  &lt;p&gt;We’ve updated the &lt;a href="http://msdn.com/vsto" target="_blank"&gt;VSTO Dev Center on MSDN&lt;/a&gt; with a variety of resources to help you get started learning all the new stuff that VS2010 has to offer. First off, we’ve been integrating Visual Studio 2010 content into all the pages. Here you’ll find the most up-to-date samples, videos, articles and news:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.com/vsto" target="_blank"&gt;Office Development with Visual Studio (VSTO)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.com/vstudio"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.com/sharepoint" target="_blank"&gt;SharePoint&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.. &lt;a href="http://msdn.microsoft.com/en-us/aa937802.aspx" target="_blank"&gt;more developer centers&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For instance check out the new downloads and samples pages on &lt;a href="http://msdn.microsoft.com/en-us/vsto/ff601856.aspx" target="_blank"&gt;VSTO Dev Center&lt;/a&gt;, and the new How Do I videos on &lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff459609.aspx" target="_blank"&gt;Visual Studio&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/vsto/dd164303.aspx" target="_blank"&gt;VSTO&lt;/a&gt;. The Dev Centers are your one-stop shop for all content like….&lt;/p&gt;  &lt;h3&gt;Product Downloads&lt;/h3&gt;  &lt;p&gt;Check out this link to download the Visual Studio 2010 Pro/Ultimate trial editions:&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;a href="http://www.microsoft.com/#2010-Visual-Web-Developer"&gt;&lt;/a&gt;&lt;/p&gt;   &lt;a href="http://www.microsoft.com/visualstudio/en-us/download" target="_blank"&gt;Visual Studio 2010 Pro &amp;amp; Ultimate Trial Downloads&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Samples&lt;/h3&gt;  &lt;p&gt;We’ve updated all these samples online for Visual Studio 2010’s release and have added a bunch more like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.msdn.microsoft.com/OfficeDevFuture"&gt;Office Development in Visual Studio 2010&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=9665216"&gt;Visual Studio 2010 and .NET Framework 4 Training Kit&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.msdn.microsoft.com/SharePointDev2010"&gt;SharePoint Development in Visual Studio 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;… &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd238515.aspx" target="_blank"&gt;more samples&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Articles &lt;/h3&gt;  &lt;p&gt;We also have a few MSDN Library technical articles published to get you started on some language, IDE and build features in VS as well as some notable MSDN Magazine articles on new features you can sink your teeth into. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/13ec6675-208e-4506-ae40-229c457afa52"&gt;Better Coding: Better Coding with Visual Studio 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/69169aa6-d486-4ed3-b5d0-2c898a775dff"&gt;IntelliTrace: Debugging Applications with IntelliTrace&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff624126.aspx"&gt;How to Build Visual Studio 2010 Office Development Projects with TFS Team Build 2010&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;… &lt;a href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target="_blank"&gt;more MSDN articles&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Videos&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;“How Do I” Videos&lt;/strong&gt;     &lt;br /&gt;Check out the new quick training videos on Visual Studio, VB, C#, Office and SharePoint:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vsto/dd164303.aspx" target="_blank"&gt;Office Development with Visual Studio 2010 (VSTO)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff459609.aspx#editor" target="_blank"&gt;Visual Studio 2010 IDE Series&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff459609.aspx#sdvs" target="_blank"&gt;SharePoint Development with Visual Studio 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Channel 9 Videos      &lt;br /&gt;&lt;/strong&gt;Watch these interviews and demos on Visual Studio and new features:&lt;/p&gt;  &lt;p&gt;Launch Demo: &lt;a href="http://channel9.msdn.com/shows/VS2010Launch/Sam-Gazitt-SharePoint-and-Office-Development-with-Visual-Studio-2010/"&gt;Sam Gazitt: SharePoint and Office Development with Visual Studio 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/funkyonex/How-We-Do-It-Building-the-Visual-Studio-Product-Line/"&gt;How We Do It: Building the Visual Studio Product Line&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/funkyonex/Overview-of-SharePoint-Development-in-Visual-Studio-2010/"&gt;Overview of SharePoint Development in Visual Studio 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;…&lt;a href="http://channel9.msdn.com/tags/Visual+Studio+2010/" target="_blank"&gt;more VS2010 on Channel 9&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/Niners/funkyonex/" target="_blank"&gt;more of my interviews on Channel 9 (more coming soon!)&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Blogs&lt;/h3&gt;  &lt;p&gt;Here are some of my favorite blogs that contain essential resources on Visual Studio 2010:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/visualstudio/" target="_blank"&gt;Visual Studio Platform Team Blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/vsto/" target="_blank"&gt;Office Development with Visual Studio Team Blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/vsdata/" target="_blank"&gt;Visual Studio Data Team Blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/sharepoint"&gt;SharePoint Team Blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/jasonz/"&gt;Jason Zander&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Check the Blogs, Dev Centers and Channel 9 for more content in the weeks to come, we’re still making updates and producing new content. Now that Visual Studio is launched, we’re just getting started here on MSDN! Have feedback and questions? &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/visualstudio" target="_blank"&gt;Discuss Visual Studio and related technologies on the MSDN Forums&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I want to thank everyone in Visual Studio and DevDiv here at Microsoft and especially the BizApps team for a wonderful and exciting product! Visual Studio just keeps getting better and better.&lt;/p&gt;  &lt;p&gt;Enjoy,   &lt;br /&gt;-&lt;a href="http://blogs.msdn.com/bethmassi" target="_blank"&gt;Beth Massi&lt;/a&gt;, Visual Studio Community&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9994697" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Beth+Massi/">Beth Massi</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category></item><item><title>Deploying COM Add-ins for 64-bit Office using Visual Studio (Saaid Khan for Nathan Halstead)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/04/09/deploying-com-add-ins-for-64-bit-office-using-visual-studio-saaid-khan-for-nathan-halstead.aspx</link><pubDate>Fri, 09 Apr 2010 21:02:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9993414</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=9993414</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/04/09/deploying-com-add-ins-for-64-bit-office-using-visual-studio-saaid-khan-for-nathan-halstead.aspx#comments</comments><description>&lt;p&gt;Nathan Halstead is a Program Manager on the Visual Studio Team. He is responsible for various aspects of Visual Studio extensibility, and is an avid ice hockey enthusiast. On occasion, he’s been known to guest author technical articles on various Microsoft blogs and forums. My only contribution to this blog is posting it here :). Here is what Nathan has to say:&lt;/p&gt;  &lt;p&gt;Later this year, Microsoft will release the next version of its Office productivity suite – Office 2010. The 2010 release will be offered in both 32 and 64-bit flavors. The new 64-bit flavor of Office is especially useful for enabling computationally rich applications requiring larger amounts of system resources. However, the move to 64-bit poses some additional challenges for add-in developers who want to target both the 32 and 64-bit versions of Office. &lt;/p&gt;  &lt;p&gt;For the past few releases, Visual Studio has shipped with several templates for creating add-ins for Office. If you are planning to build extensions for Office, and have not already done so, I strongly encourage you to take a look at the &lt;a href="http://msdn.com/vsto"&gt;Visual Studio Tools for Office (VSTO)&lt;/a&gt; templates, which offer visual designers and managed APIs for developing and testing your Microsoft Office extensions.&lt;/p&gt;  &lt;p&gt;If you can’t or don’t want to use the VSTO templates, Visual Studio also offers a bare-bones template for developing COM-based add-ins for Office called the “Shared Add-in” template. This template generates a solution which includes a basic implementation Office’s IDTExtensibility2 interface, and a lightweight MSI project for deploying the add-in. For the past several years, this bare-bones template has been sufficient for getting started with Office extensibility. If, however, you want to use it to target 64-bit Office, there are a few issues you might encounter that you should be aware of. This article will briefly walk you through these issues and explain how to work around them.&lt;/p&gt;  &lt;h4&gt;Creating a new Shared Add-in&lt;/h4&gt;  &lt;p&gt;To create a new Shared Add-in, select the project template from the new project dialog. For the purposes of this example, we will be creating a globally registered C# based add-in using Visual Studio 2008. To do this, launch Visual Studio with Administrator privileges (to ensure the build process has permissions to the HKCR registry hive) and select a new &lt;b&gt;Shared Add-in&lt;/b&gt; under “Other Project Types -&amp;gt; Extensibility”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image002%5B4%5D_thumb.jpg" width="244" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A wizard will appear to guide you through the creation of your Add-in. Note that if you did not launch Visual Studio with Administrator privileges, the option to globally register your add-in will be disabled:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image004%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image004%5B4%5D_thumb.jpg" width="244" height="187" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you’ve finished the wizard, your solution will be generated, and configured for proper x86 deployment.&lt;/p&gt;  &lt;h4&gt;Registering the add-in with 64-bit Office for debugging&lt;/h4&gt;  &lt;p&gt;When the Shared Add-In Wizard finishes generating the solution, it automatically registers your add-in with the Office applications specified in the wizard. This ensures that debugging can work without running your setup application. If you selected the “My add-in should be available to all users…” option in the wizard, it registers your add-in to the 32-bit global registry location viewable in Regedit as &lt;i&gt;[HKLM\Software\&lt;b&gt;Wow6432Node&lt;/b&gt;\Microsoft\Office\&amp;lt;App&amp;gt;\AddIns\&amp;lt;AddInName&amp;gt;].&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;However, 64-bit Office cannot see registration information in this location. To load your add-in automatically, this registration information will need to be copied to 64 bit registry locations for 64-bit Office to see. To do this, copy all of the registry keys under &lt;i&gt;[HKLM\Software\&lt;b&gt;Wow6432Node&lt;/b&gt;\Microsoft\Office\&amp;lt;App&amp;gt;\AddIns\&amp;lt;AddInName&amp;gt;] &lt;/i&gt;to &lt;i&gt;[HKLM\Software\Microsoft\Office\&amp;lt;App&amp;gt;\AddIns\&amp;lt;AddInName&amp;gt;].&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;For example, you would copy the following keys for Word registration:    &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="272"&gt;           &lt;p&gt;&lt;b&gt;From&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="276"&gt;           &lt;p&gt;&lt;b&gt;To&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="272"&gt;           &lt;p&gt;&lt;b&gt;[HKLM\SOFTWARE\Wow6432Node\&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;Microsoft\Office\Word\Addins\MyAddin1.Connect]&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&amp;quot;FriendlyName&amp;quot;=&amp;quot;Name&amp;quot;&lt;/p&gt;            &lt;p&gt;&amp;quot;Description&amp;quot;=&amp;quot;Description&amp;quot;&lt;/p&gt;            &lt;p&gt;&amp;quot;LoadBehavior&amp;quot;=dword:00000003&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="276"&gt;           &lt;p&gt;&lt;b&gt;[HKLM\SOFTWARE\Microsoft\Office\Word\&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;Addins\MyAddin1.Connect]&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&amp;quot;FriendlyName&amp;quot;=&amp;quot;Name&amp;quot;&lt;/p&gt;            &lt;p&gt;&amp;quot;Description&amp;quot;=&amp;quot;Description&amp;quot;&lt;/p&gt;            &lt;p&gt;&amp;quot;LoadBehavior&amp;quot;=dword:00000003&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;h4&gt;Retargeting for x64 deployment &lt;/h4&gt;  &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="279"&gt;         &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image006%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006[4]" border="0" alt="clip_image006[4]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image006%5B4%5D_thumb.jpg" width="151" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="495"&gt;         &lt;p&gt;With your new solution in hand, the next step is to update its installer to follow 64-bit Windows deployment conventions. To do this, select the Setup project in the Solution Explorer, and update the project’s &lt;i&gt;TargetPlatform&lt;/i&gt; property to &lt;i&gt;x64&lt;/i&gt; in the Properties window. &lt;/p&gt;          &lt;p&gt;If you are using Visual Studio 2010, this is the only change that should be needed for your deployment project. Your installer will now be able to properly register your add-in with 64-bit versions of Office!&lt;/p&gt;          &lt;p&gt;However, if you are using Visual Studio 2008, a bug in the deployment project system prevents the proper registration of 64-bit COM components. To work around this limitation, follow the instructions listed in the listed in the &lt;a href="http://msdn.microsoft.com/en-us/library/kz0ke5xt.aspx"&gt;Troubleshooting Windows Installer Deployments&lt;/a&gt; topic on MSDN. See the &lt;b&gt;Cannot load 64-bit self-registering DLL’s&lt;/b&gt; section, which describes in detail how to work around this for your Shared-Add-in assemblies by manually writing the 64-bit registry keys that register your COM assemblies.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Making your entire solution 64-bit&lt;/h4&gt;  &lt;p&gt;While native C++ applications will need to be updated to explicitly target 64-bit machines, in most cases Office will happily load your.NET add-ins without requiring you to explicitly target an x64 platform. However, there are situations where you will have to update your .NET assembly to be explicitly 64-bit. For example, Misha Shneerson highlights a situation on his blog where you may choose to use unsafe code to &lt;a href="http://blogs.msdn.com/mshneer/archive/2007/10/10/preserving-transparency-when-rendering-office-icons.aspx"&gt;preserve icon transparency&lt;/a&gt; when rendering Office icons. If you use unsafe code, then you will need to recompile your assembly for the x64 platform.&lt;/p&gt;  &lt;p&gt;Before doing this, you should familiarize yourself with some of the work that may be involved to ensure your add-in works properly when running 64-bit. There are a large number of resources available on this topic, but &lt;a href="http://msdn.microsoft.com/en-us/library/ms973190.aspx"&gt;this MSDN article&lt;/a&gt; does a good job covering some of the fundamental considerations for .NET applications, and this vintage &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc300794.aspx#edupdate"&gt;MSDN Magazine article&lt;/a&gt; does a fantastic job for native C++ applications.&lt;/p&gt;  &lt;p&gt;If you need to build a 64-bit assembly, you will need to update your project’s build properties to do so. You may do this from within the properties editor for your project. For example, in a C# project, right click, and select properties to open the properties editor:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image008%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008[4]" border="0" alt="clip_image008[4]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image008%5B4%5D_thumb.jpg" width="145" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Navigate to the build tab, and change the &lt;b&gt;Platform Target&lt;/b&gt; to x64:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image010%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image010[4]" border="0" alt="clip_image010[4]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image010%5B4%5D_thumb.jpg" width="244" height="90" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For most Visual Studio projects, a 64-bit binary would be generated when you save and build. However, there is a bug in the VB and C# project systems that causes a build error for Shared Add-in projects. When you attempt to build, you will receive an error that states that your dll “is not a valid assembly.”&lt;/p&gt;  &lt;p&gt;The culprit is the “Register for COM interop” project setting on the build tab:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image012%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image012[4]" border="0" alt="clip_image012[4]" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/DeployingCOMAddinsfor64bitOfficeusingVis_C427/clip_image012%5B4%5D_thumb.jpg" width="244" height="81" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;By selecting this checkbox, a build task is automatically generated to register the COM assembly. This is used by the template to make it easier to test your add-in by automatically deploying your assembly on your machine. However, this task uses the 32-bit version of the regasm tool, which throws a “is not a valid assembly” error when run against 64-bit assemblies. The workaround for this issue is described in &lt;a href="http://support.microsoft.com/kb/956933"&gt;KB Article 956933&lt;/a&gt;, and involves unchecking this option, and creating your own build event to do the 64-bit registration.&lt;/p&gt;  &lt;h4&gt;A best practice for COM add-ins&lt;/h4&gt;  &lt;p&gt;With your setup project and your add-in assemblies updated, you will now be able to install and run your COM addin inside 64-bit Office applications! However, if you decide to build your add-in for Office without using VSTO, I would &lt;b&gt;highly&lt;/b&gt; recommend using the COM Shim wizard, which will help you isolate your add-in ino a separate app-domain for better resiliency:&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://msdn.microsoft.com/en-us/library/aa159894(office.11).aspx"&gt;VS 2008 COM Shim Wizard&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://blogs.msdn.com/mshneer/archive/2010/03/19/com-shim-wizards-for-vs-2010.aspx"&gt;VS 2010 COM Shim wizard&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://blogs.msdn.com/mshneer/archive/2010/02/24/taking-com-shim-wizards-to-64-bit.aspx"&gt;COM Shims and x64 Office&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you have additional recommendations and best-practices you think would be helpful to share, please include these in the comments! Have fun extending Office 2010!&lt;/p&gt;  &lt;p&gt;Saaid Khan, Program Manager&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9993414" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/add_2D00_ins/">add-ins</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Nathan+Halstead/">Nathan Halstead</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Saaid+Khan/">Saaid Khan</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/64_2D00_bit/">64-bit</category></item><item><title>Why is FrameworkVersionMismatchException thrown? (Hamed Ahmadi)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/04/06/why-is-frameworkversionmismatchexception-thrown-hamed-ahmadi.aspx</link><pubDate>Tue, 06 Apr 2010 17:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9991286</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=9991286</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/04/06/why-is-frameworkversionmismatchexception-thrown-hamed-ahmadi.aspx#comments</comments><description>&lt;P&gt;The “Microsoft.VisualStudio.Tools.Applications.Deployment.FrameworkVersionMismatchException” is thrown due to the specific implementation of how VSTO 2010 runtime loads the appropriate CLR to install a VSTO customization.&lt;/P&gt;
&lt;P&gt;This exception is thrown when both .NET Framework 3.5 (CLR 2.0) and .NET Framework 4 (CLR 4) are installed on a machine and a VSTO customization which targets .NET Framework 4 is installed. The exception happens only when the customization is installed and has no impact on the successful installation and loading of the customization despite the fact that you can see an error logged in the event log, like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;Microsoft.VisualStudio.Tools.Applications.Deployment.FrameworkVersionMismatchException: &amp;lt;compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;&amp;lt;framework targetVersion="4.0" profile="Client" supportedRuntime="4.0.30319" /&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;&amp;lt;framework targetVersion="4.0" profile="Full" supportedRuntime="4.0.30319" /&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;&amp;lt;/compatibleFrameworks&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;at Microsoft.VisualStudio.Tools.Office.Runtime.SolutionInstaller.Install(ClickOnceAddInDeploymentManager clickOnceAddInDeploymentManager, OfficeAddInDeploymentManager officeDeploymentManager, AddInInformation&amp;amp; info) at Microsoft.VisualStudio.Tools.Office.Runtime.SolutionInstaller.ProcessInstallerOperation(ClickOnceAddInDeploymentManager clickOnceAddInDeploymentManager, OfficeAddInDeploymentManager officeAddInDeploymentManager, AddInInformation&amp;amp; info) at Microsoft.VisualStudio.Tools.Office.Runtime.SolutionInstaller.ProcessInstallerOperation(Boolean uninstall, Boolean silent, Uri manifest, Int32&amp;amp; errorCode, String&amp;amp; errorMessage)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;To install a VSTO customization, the native piece of VSTO runtime loads the CLR and lets the managed runtime parse the deployment manifest and install the customization. The target .NET Framework is specified in the deployment manifest (&amp;lt;CompatibleFrameworks&amp;gt; element). Therefore, when loading the CLR, the native VSTO runtime does not know which version of the .NET Framework the customization targets. Before CLR 4, CLR 2.0 was always loaded. Now that VSTO supports multi-targeting, we needed a mechanism to select the correct version of CLR to host. &lt;/P&gt;
&lt;P&gt;At a high level, the runtime first attempts to load CLR 2.0 since we anticipated that the majority of developers target .NET Framework 3.5. Once CLR 2.0 is loaded, the managed runtime downloads and parses the deployment manifest. At this moment, if it is found out that the customization targets .NET Framework 4, “FrameworkVersionMismatchException” is thrown by the managed runtime and the compatible Framework is passed along. The native runtime catches the exception and loads CLR 4. &lt;/P&gt;
&lt;P&gt;In summary, this exception does not indicate any error and is not the reason why a VSTO customization is not installed or loaded properly. Please follow the instructions in &lt;A href="http://msdn.microsoft.com/en-us/library/ms269003(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms269003(VS.100).aspx"&gt;Debugging in Application-Level Projects&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/h1e6ht9c(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/h1e6ht9c(VS.100).aspx"&gt;Debugging in Document-Level Projects&lt;/A&gt; to troubleshoot a VSTO customization.&amp;nbsp;Should you have&amp;nbsp;further questions about your customization, please visit &lt;A href="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads" mce_href="http://social.msdn.microsoft.com/Forums/en-US/vsto/threads"&gt;VSTO forum&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9991286" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/runtime/">runtime</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2007/">Office 2007</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Deployment/">Deployment</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2010/">Office 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Hamed+Ahmadi/">Hamed Ahmadi</category></item><item><title>Show and Hide Context Menu Items in Outlook 2010 (Norm Estabrook)</title><link>http://blogs.msdn.com/b/vsto/archive/2010/03/12/show-and-hide-context-menu-items-in-outlook-2010-norm-estabrook.aspx</link><pubDate>Fri, 12 Mar 2010 22:31:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9977799</guid><dc:creator>VSTOTeam</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/vsto/rsscomments.aspx?WeblogPostID=9977799</wfw:commentRss><comments>http://blogs.msdn.com/b/vsto/archive/2010/03/12/show-and-hide-context-menu-items-in-outlook-2010-norm-estabrook.aspx#comments</comments><description>&lt;p&gt;If you have written code that shows and hides context menu items in Outlook 2007, that code might not behave well in Outlook 2010. That is exactly what happened to this individual &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/2e60742b-28bd-4ef0-8487-98b41c73370f"&gt;who recently posted&lt;/a&gt; to the VSTO forum. &lt;/p&gt;  &lt;p&gt;The command bar object model (which most folks use to muck around with menus) has been deprecated in Outlook 2010. You can see a list of deprecated objects here - &lt;a href="http://msdn.microsoft.com/en-us/library/ee836188(office.14).aspx"&gt;Outlook 2010 Object Model Changes Since Earlier Versions&lt;/a&gt;. Note that you can still use command bars, but be warned that “mileage may vary” and “objects in the mirror are closer than they appear”. etc. etc. You get the point.&lt;/p&gt;  &lt;p&gt;Nice, so if not the command bar object model, then what? Well, for Outlook 2010 anyway, the answer is Ribbon XML. &lt;/p&gt;  &lt;p&gt;In this post, I will show you how to show and hide items in a context menu by using Ribbon XML. The context menu appears when a user right-clicks an Outlook folder.&lt;/p&gt;  &lt;p&gt;First, add a Ribbon XML item to your Outlook 2010 project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/66a224bdbd4d_EA74/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/vsto/WindowsLiveWriter/66a224bdbd4d_EA74/image_thumb.png" width="328" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then add the following code to your ThisAddIn class. This example assumes that your Ribbon is called &lt;em&gt;Ribbon1&lt;/em&gt; and that you are using C#:&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;protected override &lt;/span&gt;Microsoft.Office.Core.&lt;span style="color: #2b91af"&gt;IRibbonExtensibility &lt;/span&gt;CreateRibbonExtensibilityObject() &lt;/p&gt;  &lt;p&gt;{ &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Ribbon1&lt;/span&gt;(); &lt;/p&gt;  &lt;p&gt;} &lt;/p&gt;  &lt;p&gt;Next, replace the contents of the Ribbon1.xml file with the following:&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;UTF-8&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;?&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;customUI &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://schemas.microsoft.com/office/2009/07/customui&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;onLoad&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Ribbon_Load&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;contextMenus&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;contextMenu &lt;/span&gt;&lt;span style="color: red"&gt;idMso&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;ContextMenuFolder&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;button &lt;/span&gt;&lt;span style="color: red"&gt;idMso&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;FolderPropertiesContext&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;getVisible&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;IsVisible&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;contextMenu&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;contextMenus&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;customUI&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Just to clarify, &amp;quot;&lt;span style="color: blue"&gt;FolderPropertiesContext&lt;/span&gt;&amp;quot; is the control identifier of the &lt;strong&gt;Properties&lt;/strong&gt; command in the context menu.&amp;#160; You can obtain the complete list of control identifiers here - &lt;a href="http://go.microsoft.com/fwlink/?LinkID=181052"&gt;Office 2010 Help Files: Office Fluent User Interface Control Identifiers&lt;/a&gt;. So you can show/hide/enable/disable just about anything you want.&lt;/p&gt;  &lt;p&gt;When Outlook is about to display the &lt;strong&gt;Properties&lt;/strong&gt; command, Outlook first consults a cool method that you are going to write called &amp;quot;&lt;span style="color: blue"&gt;IsVisible&lt;/span&gt;&amp;quot;.&amp;#160; You can name your method anything you want. You could name it &amp;quot;&lt;span style="color: blue"&gt;ShouldIShowThisMethodOrShouldINotShowThisMethod&lt;/span&gt;&amp;quot; or &amp;quot;&lt;span style="color: blue"&gt;NormsExamplesAreAlwaysVeryCoolandUseful&lt;/span&gt;“.&amp;#160; Totally up to you. It’s only important that you use the correct method signature.&lt;/p&gt;  &lt;p&gt;So let’s write the &lt;span style="color: blue"&gt;”IsVisible”&lt;/span&gt; method. Add the following method to the Ribbon1.xml file.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public bool &lt;/span&gt;IsVisible(Office.&lt;span style="color: #2b91af"&gt;IRibbonControl &lt;/span&gt;control)
{
    &lt;span style="color: blue"&gt;string &lt;/span&gt;foldername = ((Microsoft.Office.Interop.Outlook.&lt;span style="color: #2b91af"&gt;Folder&lt;/span&gt;)control.Context).Name;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(foldername == &lt;span style="color: #a31515"&gt;&amp;quot;Inbox&amp;quot;&lt;/span&gt;)
    {
        &lt;span style="color: blue"&gt;return false&lt;/span&gt;;
    }
    &lt;span style="color: blue"&gt;return true&lt;/span&gt;;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;This code grabs the context of the control that is passed into the method. In this case, the context is the currently selected folder.&lt;/p&gt;

&lt;p&gt;If the user right-clicks the Inbox folder, then we tell Outlook to not show the command by returning &lt;strong&gt;false&lt;/strong&gt;. Otherwise, we tell Outlook to go ahead and make the command visible by returning &lt;strong&gt;true&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But wait. There’s more!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the first couple of times that you right-click a folder, Outlook takes a coffee brake and stops calling your method.&amp;#160; Actually, Outlook just caches the state of each control. If you want Outlook to call this method again, you have to “clear” that cache by “invalidating” the control.&amp;#160; Here is what I did to make that happen:&lt;/p&gt;

&lt;p&gt;First, provide access to the &lt;strong&gt;RibbonUI&lt;/strong&gt; object in your ThisAddIn class. The RibbonUI object enables you to “invalidate” the &lt;strong&gt;Properties&lt;/strong&gt; command of the folder context menu. Add the following code to the ThisAddIn class of your project:&lt;/p&gt;

&lt;pre class="code"&gt;Office.&lt;span style="color: #2b91af"&gt;IRibbonUI &lt;/span&gt;ribbonUI;
       
&lt;span style="color: blue"&gt;public &lt;/span&gt;Office.&lt;span style="color: #2b91af"&gt;IRibbonUI &lt;/span&gt;RibbonUI
{
    &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;ribbonUI; }
    &lt;span style="color: blue"&gt;set &lt;/span&gt;{ ribbonUI = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, set the RibbonUI property of your ThisAddIn class within the &lt;strong&gt;Ribbon_Load&lt;/strong&gt; event of the Ribbon code file as follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;Ribbon_Load(Office.&lt;span style="color: #2b91af"&gt;IRibbonUI &lt;/span&gt;ribbonUI)
{
    &lt;span style="color: blue"&gt;this&lt;/span&gt;.ribbon = ribbonUI;
    &lt;span style="color: #2b91af"&gt;Globals&lt;/span&gt;.ThisAddIn.RibbonUI = ribbonUI;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, in the ThisAddIn class, handle the FolderContextMenuDisplay event of the Application object.&lt;/p&gt;

&lt;p&gt;In the event handler of this event, “invalidate” the “FolderPropertiesContext” control.&lt;/p&gt;

&lt;pre class="code"&gt;Outlook.&lt;span style="color: #2b91af"&gt;Application &lt;/span&gt;app;
&lt;span style="color: blue"&gt;private void &lt;/span&gt;ThisAddIn_Startup(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, System.&lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)
{
    app = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Application;
    app.FolderContextMenuDisplay += &lt;span style="color: blue"&gt;new &lt;/span&gt;Outlook.&lt;span style="color: #2b91af"&gt;ApplicationEvents_11_FolderContextMenuDisplayEventHandler&lt;/span&gt;(app_FolderContextMenuDisplay);
 
}

&lt;span style="color: blue"&gt;void &lt;/span&gt;app_FolderContextMenuDisplay(Office.&lt;span style="color: #2b91af"&gt;CommandBar &lt;/span&gt;CommandBar, Outlook.&lt;span style="color: #2b91af"&gt;MAPIFolder &lt;/span&gt;Folder)
{
    RibbonUI.InvalidateControlMso(&lt;span style="color: #a31515"&gt;&amp;quot;FolderPropertiesContext&amp;quot;&lt;/span&gt;);
}    &lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;You can find other useful info about how to extend the Outlook user interface here &lt;a href="http://msdn.microsoft.com/en-us/library/ee692172(office.14).aspx"&gt;Extending the User Interface in Outlook 2010&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9977799" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VSTO/">VSTO</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Norm+Estabrook/">Norm Estabrook</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2008/">VS2008</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+Development/">Office Development</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+14/">Office 14</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Visual+Studio+2010/">Visual Studio 2010</category><category domain="http://blogs.msdn.com/b/vsto/archive/tags/Office+2010/">Office 2010</category></item></channel></rss>
