<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://yalecny.org/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/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>Summit Software</title><link>http://yalecny.org/blogs/</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>UpgradeHelper Sample Now Available</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/12/04/UpgradeHelper-Sample-Now-Available.aspx</link><pubDate>Thu, 04 Dec 2008 19:52:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1538</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;A new sample &amp;quot;&lt;/span&gt;&lt;a href="http://www.summsoft.com/media/p/1536.aspx" title="Summit:  UpgradeHelper Sample"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;UpgradeHelper Sample&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&amp;quot;&amp;nbsp;is available showing how to register and use an &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175886.aspx" title="MSDN:  Migrating Add-in Projects"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;UpgradeHelper&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Excerpt:&lt;/span&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;
&lt;p&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;To support VSTA v 1 projects in VSTA v 2 you need to create and register an &lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175886.aspx" title="MSDN:  Migrating Add-in Projects"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;UpgradeHelper&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span&gt;&lt;span&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This helper is triggered when a VSTA v 1 project is opened in the VSTA v 2 IDE.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If VSTA v 1 is installed, VSTA v 1 projects will still open normally in the VSTA v 1 IDE when doubled clicked.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Projects must be opened through the VSTA v 2 IDE to trigger the UpgradeHelper and once upgraded will open in the VSTA v 2 IDE when double clicked.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;A couple of notes about using an UpgradeHelper:&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;1)&amp;nbsp; You must use two unique HostID&amp;rsquo;s in order to use an UpgradeHelper.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Using the same HostID for VSTA v 1 and VSTA v 2 will cause the UpgradeHelper not to be triggered.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Related topic:&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/08/25/How-to-Update-a-Host_1920_s-Folder-in-_2500_My-Documents_2500_-.aspx" title="Summit Blog"&gt;&lt;span&gt;&lt;span style="font-size:small;color:#3366cc;font-family:arial,helvetica,sans-serif;"&gt;How to Update a Host&amp;rsquo;s Folder in %My Documents%.&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;2)&amp;nbsp; In the RemovedReferences section use only the name of the reference to removed- including any other information like the version or public key token will result in the reference not being removed.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;3)&amp;nbsp; Only valid projects will trigger the UpgradeHelper.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Projects missing the AppAddIn.designer.cs file from the list of compilable files will not trigger the UpgradeHelper.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;4)&amp;nbsp; To be sure that the correct version of a reference is added, you may want to use the full GAC information for the reference since you cannot specify SpecificVersion=true.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Related topic:&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;a href="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/08/15/Proxy-Versioning-Options-for-Project-Templates.aspx" title="Summit Blog"&gt;&lt;span&gt;&lt;span style="font-size:small;color:#3366cc;"&gt;Proxy Versioning Options for Project Templates&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:small;"&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:small;"&gt;Example:&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;quot;&lt;span style="font-size:small;"&gt;ShapeAppCSharpProxy, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3c3c0c46dd27dbcf, processorArchitecture=MSIL&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;5)&amp;nbsp; VSTA v 1 projects cannot be opened programmatically through VSTA v 2.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Using dte.Solution.AddFromFile or dte.Solution.Open will throw an error if the project has not been previously upgraded.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;We are looking for a workaround for this (add a comment if you know of one please).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;6)&amp;nbsp; The UpgradeHelper is triggered at the end of the normal Visual Studio conversion wizard.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;7)&amp;nbsp;The VSTA registries required for the UpgradeHelper are a little tricky- you may want to base yours off the included example&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;span&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://yalecny.org/aggbug.aspx?PostID=1538" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/add-in/default.aspx">add-in</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/VSTA+1/default.aspx">VSTA 1</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/VSTA+2/default.aspx">VSTA 2</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/UpgradeHelper/default.aspx">UpgradeHelper</category></item><item><title>New Sample Available: Two Applications Share a HostID Sample</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/11/18/New-Sample-Available--Two-Applications-Share-a-HostID-Sample.aspx</link><pubDate>Tue, 18 Nov 2008 21:31:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1472</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;I posted a new sample today which goes with my previous blog.&amp;nbsp; This sample demonstrates many of the host Application, hostID, proxy and entry point combiniations outlined in the &lt;/span&gt;&lt;a href="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/11/17/Application_2C00_-HostID_2C00_-Proxy-and-EntryPoint-Associations.aspx?CommentPosted=true#commentmessage" title="Summit:  Application, HostID, Proxy, and EntryPoint Associations Blog"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Application, HostID, Proxy, and EntryPoint Associations&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;blog.&amp;nbsp; If there is another combination you are interested in or if you have any questions on the sample, please leave a comment.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;br /&gt;Excerpt &amp;nbsp;from the &lt;/span&gt;&lt;a href="http://www.summsoft.com/media/p/1470.aspx" title="Summit:  Two Applications Share a HostID Sample"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Two Applications Share a HostID Sample&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;This sample demonstrates how two applications can share one host ID.&lt;/span&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;There are two applications which share a common base type library:&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Applicatoin_A and Application_B share the SharedLib library.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Application_B is based on Application_A with additional methods.&lt;/span&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&lt;span&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;Each application has its own entry point type, Applicatoin_A .ApplicationA and Applicatoin_B.ApplicationB, and the shared base type library has an entry point type SharedLib.SharedApplication.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Both applications have a HostItemProvider which can return the entry point for its application or the SharedLib.SharedApplication.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Application_A can load and run add-ins written for the entry points ApplicationA and SharedApplication, but not ApplicationB add-ins.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;Application_B can load and run add-ins written for the entry points ApplicationB and SharedApplication, but not Application_A add-ins.&lt;/span&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;Application_A&amp;nbsp; and Application_B can both debug at the same time (using different macro projects) using the same HostID.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Application_A uses a macro project based on the ApplicationA_Template.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Application_B uses a macro project based on the ApplicationB_Template.&lt;/span&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Results:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;It is possible to use the same hostID for different applications and debug them concurrently&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;It is possible for an application to load and run add-ins, so long as the add-in is compatible with the host (the HostItemProvider must return the entry point type of the add-in).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1472" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/HostID/default.aspx">HostID</category></item><item><title>Application, HostID, Proxy, and EntryPoint Associations</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/11/17/Application_2C00_-HostID_2C00_-Proxy-and-EntryPoint-Associations.aspx</link><pubDate>Mon, 17 Nov 2008 21:54:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1469</guid><dc:creator>Melody</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;
&lt;div&gt;&lt;span style="font-size:10pt;"&gt;There are a variety of configurations possible between host applications, hostID&amp;#39;s, proxies, and entry points.&amp;nbsp; Which configuration to use is a design decision which requires careful consideration, especially if you are deploying multiple applications bundled together or one application targeted at different user groups.&amp;nbsp; Below are some possible configurations to consider.&lt;/span&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;
&lt;p&gt;
&lt;div&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 Host Application,&amp;nbsp; 1 HostID,&amp;nbsp; 1 Proxy,&amp;nbsp; 1 Entry Point:&lt;/strong&gt;&lt;br /&gt;This is the simplest and most straight forward scenario.&amp;nbsp; The host application loads add-ins which are all written against the same proxy using the same &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSDN: Defining Entry Points and Other Proxy Changes"&gt;entry point&lt;/a&gt;.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;for this scenario is very simple because there is only one type to return.&amp;nbsp; The add-ins are created based &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt; using the same hostID, proxy, and entry point.&amp;nbsp; Multiple templates using the same entry point may be used, for example one template could be the &amp;quot;bare bones&amp;quot; variety generated by &lt;a href="http://msdn.microsoft.com/en-us/library/cc175975.aspx" title="MSDN: Creating Project Templates Using ProjectGen"&gt;ProjectGen&lt;/a&gt; and another could be more robust including events already hooked up.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 Host Application,&amp;nbsp; 1 HostID,&amp;nbsp; 1 Proxy,&amp;nbsp; Multiple Entry Points:&lt;/strong&gt;&lt;br /&gt;This setup builds on the first scenario but offers templates using different &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSDN: Defining Entry Points and Other Proxy Changes"&gt;entry points&lt;/a&gt;, for example Application level and Document level templates.&amp;nbsp; The host loads the add-ins using a more complex &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;to determine which entry point type to return to the add-ins.&amp;nbsp; The add-ins are created based on &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt; using the same HostID and proxy, but different templates and entry points.&amp;nbsp; Each entry point must have at least one template to be used by add-ins.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 Host Application,&amp;nbsp; 1 HostID,&amp;nbsp; Multiple Proxies,&amp;nbsp; 1 Entry Point:&lt;/strong&gt;&lt;br /&gt;This setup is similar to the second scenario but offers templates using different proxies, for example a SimpleOM proxy for basic users and a FullOM proxy for power users.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;for this scenario is very simple because there is only one type to return; the difference in the object model exposed is in the proxy and does not affect the HostItemProvider.&amp;nbsp; The add-ins are created based on &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt; using the same hostId and &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSDN: Defining Entry Points and Other Proxy Changes"&gt;entry point&lt;/a&gt;, but different templates and proxies.&amp;nbsp; Each proxy must have at least one template to be used by add-ins.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 Host Application,&amp;nbsp; 1 HostID,&amp;nbsp; Multiple Proxies,&amp;nbsp; Multiple Entry Points:&lt;/strong&gt;&lt;br /&gt;This is a somewhat complex setup which offers both different proxies and different &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSND:  Defining Entry Points and Other Proxy Changes"&gt;entry points&lt;/a&gt; which can be used to make a variety of &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt;, for example a SimpleApplication and AdvancedApplication as well as SimpleDocument and AdvancedDocument templates (SimpleApplication would have &amp;quot;this&amp;quot; or &amp;quot;me&amp;quot; as an Application object and expose only a few parts of the object model, while the AdvancedDocument would have &amp;quot;this&amp;quot; or &amp;quot;me&amp;quot; as an Document object and expose a robust view of the object model).&amp;nbsp; The host application loads the add-ins written against different proxies and entry points.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;would determine which entry point type to return based on the entry point type of the add-in, for example Application or Document, but not Simple or Advanced; therefore, the SimpleApplication and AdvancedApplication add-ins would be handled the same way by the HostItemProvider.&amp;nbsp; The add-ins are created based on templates using the same hostId but different templates using entry points / proxy combination.&amp;nbsp; Each entry point/proxy combination would need its own template to be used by add-ins.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 Host Application,&amp;nbsp; Multiple HostID,&amp;nbsp; 1 Proxy,&amp;nbsp; 1 Entry Point:&lt;/strong&gt;&lt;br /&gt;This setup is very similar to the first scenario, but uses different hostIDs.&amp;nbsp; Each hostID has its own templates which could be very similar, for example having the hostID as the only difference.&amp;nbsp; The host application loads add-ins which are all written against the same proxy using the same &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSDN: Defining Entry Points and Other Proxy Changes"&gt;entry point&lt;/a&gt; but multiple hostIDs.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;for this scenario is very simple because there is only one type to return.&amp;nbsp; Add-ins are loaded based on entry point types, not hostIDs, so it is possible for one application to load add-ins based on &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt; registered under different hostIDs so long as the entry point type for the add-in can be resolved in the HostItemProvider.&amp;nbsp; The add-ins are created based templates using the same proxy and entry point, but the templates are registered under different hostID&amp;#39;s.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;IDE and template considerations for this scenario&lt;/em&gt;- Each &lt;a href="http://msdn.microsoft.com/en-us/library/cc176002.aspx" title="MSDN:  How to: Register the Host Application"&gt;hostID&lt;/a&gt; should use a different &lt;a href="http://msdn.microsoft.com/en-us/library/cc176071.aspx"&gt;ProjectTemplatesLocations&lt;/a&gt; because the VSTA IDE is &amp;nbsp;HostID specific; therefore, projects for HostID_A cannot be opened in the IDE for HostID_B.&amp;nbsp; Also, a host application can only register as a debug host for one hostID at a time; multiple IDE&amp;#39;s for different HostIDs cannot be displayed or managed by the same application concurrently.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 6)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 Host Application,&amp;nbsp; Multiple HostID,&amp;nbsp; Multiple Proxies,&amp;nbsp; Multiple Entry Point:&lt;/strong&gt;&lt;br /&gt;This complex setup is very similar to the fifth scenario, but using different multiple proxies and &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSDN: Defining Entry Points and Other Proxy Changes"&gt;entry points&lt;/a&gt; like the fourth scenario.&amp;nbsp; Each hostID has its own &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt; which could be very similar, for example having the hostID as the only difference, or very different, for example using different proxies and entry point combinations.&amp;nbsp; The host application loads add-ins written against different proxies and entry points based on templates registered under different hostIDs.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;would determine which entry point type to return based on the entry point type of the add-in.&amp;nbsp; Add-ins are loaded based on entry point types, not hostIDs, so it is possible for one application to load add-ins based on templates registered under different hostIDs so long as the entry point type for the add-in can be resolved in the HostItemProvider.&amp;nbsp; The add-ins are created based templates using different proxy / entry point combinations and registered under different hostIDs.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;IDE and template considerations for this scenario&lt;/em&gt;- Each &lt;a href="http://msdn.microsoft.com/en-us/library/cc176002.aspx" title="MSDN:  How to: Register the Host Application"&gt;hostID&lt;/a&gt; should use a different &lt;a href="http://msdn.microsoft.com/en-us/library/cc176071.aspx" title="MSDN: Host Configuration Registry Key Settings"&gt;ProjectTemplatesLocations&lt;/a&gt; because the VSTA IDE is &amp;nbsp;HostID specific; therefore, projects for HostID_A cannot be opened in the IDE for HostID_B.&amp;nbsp; Also, a host application can only register as a debug host for one hostID at a time; multiple IDE&amp;#39;s for different HostIDs cannot be displayed or managed by the same application concurrently.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Error when a project based on a different hostID is opened in ShapeAppCSharp&amp;#39;s IDE:&lt;br /&gt;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/Open-wrong-HostID-Error.png" alt="" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;"&gt;
&lt;p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scenario 7)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Multiple Host Applications,&amp;nbsp; 1 HostID,&amp;nbsp; 1 Proxy,&amp;nbsp; 1 Entry Point:&lt;br /&gt;&lt;/strong&gt;This is a simple scenario which can be used by applications which share base types, including the base type which will be an &lt;a href="http://msdn.microsoft.com/en-us/library/cc175950.aspx" title="MSDN: Defining Entry Points and Other Proxy Changes"&gt;entry point&lt;/a&gt; type (for example two applications which use the same Document type as the entry point).&amp;nbsp; The host applications load add-ins which are all written against the same proxy using the same entry point.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/en-us/library/cc175437.aspx" title="MSDN: Understanding Host Item Providers"&gt;HostItemProvider &lt;/a&gt;for this scenario is very simple because there is only one type to return.&amp;nbsp; The add-ins are created based &lt;a href="http://msdn.microsoft.com/en-us/library/cc175544.aspx" title="MSDN: Creating Project Templates (VSTA)"&gt;templates&lt;/a&gt; using the same hostID, proxy, and entry point.&amp;nbsp; Multiple templates using the same entry point may be used, for example one template could be the &amp;quot;bare bones&amp;quot; variety generated by ProjectGen and another could be more robust including events already hooked up. &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;IDE and template considerations for this scenario&lt;/em&gt;- Multiple applications can concurrently display, manage, and debug IDE&amp;#39;s for the same &lt;a href="http://msdn.microsoft.com/en-us/library/cc176002.aspx" title="MSDN:  How to: Register the Host Application"&gt;hostID&lt;/a&gt; (ex:&amp;nbsp; run two instances of the ShapeAppMacroRecordingCSharp sample at the same time).&amp;nbsp; Therefore, applications can share a hostID without &amp;quot;locking&amp;quot; the other application out of debugging.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Because both applications use the same HostID, they will share the same IDE and registry settings like &lt;a href="http://msdn.microsoft.com/en-us/library/cc176071.aspx" title="MSDN: Host Configuration Registry Key Settings"&gt;ProjectTemplatesLocation, AppName, and UserFilesFolderName&lt;/a&gt;.&amp;nbsp; Therefore, the IDE cannot be customized through the default settings file to be different for each host application.&amp;nbsp; Also, all templates for the hostID will appear as choices in the IDE.&amp;nbsp; It is possible to refine this by storing the templates in subfolders under the ProjectTemplatesLocation.&amp;nbsp; For example the ProjectTemplatesLocation could be C:\MyApp\Templates with the sub folders VisualBasic and CSharp, and within these folders the template could be divided in folders like C:\MyApp\Templates\{VisualBasic, CSharp}\{App_A, App_B}; the templates would appear as choices under the sub folders.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Project template storage and new project pane for templates stored as described above:&lt;br /&gt;&lt;strong&gt;&lt;img width="232" src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/MultpleHostTemplatesUnder1ID_5F00_PTL.png" height="123" style="vertical-align:top;" alt="" /&gt;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/MultipleHostTemplatesUnder1ID.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1469" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/HostID/default.aspx">HostID</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/ProjectTemplatesLocation/default.aspx">ProjectTemplatesLocation</category></item><item><title>Monitoring and Controlling the IDE- Catching the File.Exit and other events</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/11/13/Monitoring-and-Controlling-the-IDE_2D00_-Catching-the-File.Exit-and-other-events.aspx</link><pubDate>Thu, 13 Nov 2008 20:35:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1451</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;You may wish to monitor a user&amp;rsquo;s actions in the IDE and respond to or cancel them.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I found a great article and sample which shows how to catch any and all events.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;One common request that this could be used to address is responding to the user exiting out of the IDE.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;When the IDE is launched from the host, exiting the IDE really hides it instead of closing it, leaving the vsta.exe process running, and the user is not prompted to save changes.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Below is some code added to the ShapeAppMacroRecordingCSharp sample which catches the File.Exit event, prompts the user to save the project, and quits the IDE bringing down the vsta.exe process.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;An additional method is also included which catches all events, this is very useful for determining the GUID and ID of a specific event you are interested in.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This workaround is based on an article by &lt;/span&gt;&lt;a href="http://www.mztools.com/resources_vsnet_addins.aspx"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Carlos J. Quintero&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;, &lt;/span&gt;&lt;a href="http://www.mztools.com/articles/2005/MZ2005006.aspx"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;HOWTO: Capturing commands events from Visual Studio .NET add-ins&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt; and a sample from &lt;/span&gt;&lt;a href="http://www.codeproject.com/"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;CodeProject&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;, &lt;/span&gt;&lt;a href="https://secure.codeproject.com/KB/dotnet/AttachASPNETDebuggerAddin.aspx?display=Print"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Add-in to attach ASP.NET debugger&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;.&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;br /&gt;private&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; EnsureIDE()&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#008000;"&gt;/*unchanged code omitted*/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#008000;"&gt;//get and subscribe to all events prior to execution&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;CommandEvents&lt;/span&gt; commandEvents = dte.Events.get_CommandEvents(&lt;span style="color:#a31515;"&gt;&amp;quot;{00000000-0000-0000-0000-000000000000}&amp;quot;&lt;/span&gt;, 0);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;commandEvents.BeforeExecute += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EnvDTE.&lt;span style="color:#2b91af;"&gt;_dispCommandEvents_BeforeExecuteEventHandler&lt;/span&gt;(commandEvents_BeforeExecute);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#008000;"&gt;//get and subscribe to the File.Exit event prior to execution&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;CommandEvents&lt;/span&gt; exitCommand = dte.Events.get_CommandEvents(&lt;span style="color:#a31515;"&gt;&amp;quot;{5EFC7975-14BC-11CF-9B2B-00AA00573819}&amp;quot;&lt;/span&gt;, 229);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;exitCommand.BeforeExecute += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EnvDTE.&lt;span style="color:#2b91af;"&gt;_dispCommandEvents_BeforeExecuteEventHandler&lt;/span&gt;(exitCommand_BeforeExecute);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;void&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; exitCommand_BeforeExecute(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Guid, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ID, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; CustomIn, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;object&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; CustomOut, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; CancelDefault)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//Project.IsDirty is always false, so use .Saved which starts true&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject.Saved == &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//prompt the user to save the project&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DialogResult&lt;/span&gt; answer = &lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color:#a31515;"&gt;&amp;quot;Do you want to save changes to &amp;quot;&lt;/span&gt; + &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject.Name + &lt;span style="color:#a31515;"&gt;&amp;quot;?&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;ShapeAppCSharp&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;MessageBoxButtons&lt;/span&gt;.YesNo);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (answer == &lt;span style="color:#2b91af;"&gt;DialogResult&lt;/span&gt;.Yes)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject.Save(&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#008000;"&gt;//change the saved state&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject.Saved = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//quit the IDE&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.dte.Quit();&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;void&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; commandEvents_BeforeExecute(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Guid, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ID, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; CustomIn, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;object&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; CustomOut, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; CancelDefault)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;Command&lt;/span&gt; objCommand = &lt;span style="color:#0000ff;"&gt;default&lt;/span&gt;(EnvDTE.&lt;span style="color:#2b91af;"&gt;Command&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sCommandName = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//break here to check out any commands you are interested in&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;objCommand = dte.Commands.Item(Guid, ID);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((objCommand != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;sCommandName = objCommand.Name;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (sCommandName.Equals(&lt;span style="color:#a31515;"&gt;&amp;quot;Something.WorthWatching&amp;quot;&lt;/span&gt;))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#008000;"&gt;//do something&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;Visual Basic:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;AddHandler&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.mDTE.Events.CommandEvents(&lt;span style="color:#a31515;"&gt;&amp;quot;{5EFC7975-14BC-11CF-9B2B-00AA00573819}&amp;quot;&lt;/span&gt;, 229).BeforeExecute, &lt;span style="color:blue;"&gt;AddressOf&lt;/span&gt; exitCommand_BeforeExecute&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Private&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; exitCommand_BeforeExecute(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; Guid &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; ID &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; CustomIn &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Object&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; CustomOut &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Object&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByRef&lt;/span&gt; CancelDefault &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Boolean&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39;Project.IsDirty is alwyas false, so use .Saved which starts true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.macroProject.Saved &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39;prompt the user to save the project&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; answer &lt;span style="color:blue;"&gt;As&lt;/span&gt; System.Windows.Forms.DialogResult = System.Windows.Forms.MessageBox.Show(&lt;span style="color:#a31515;"&gt;&amp;quot;Do you want to save changes to &amp;quot;&lt;/span&gt; + &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.macroProject.Name + &lt;span style="color:#a31515;"&gt;&amp;quot;?&amp;quot;&lt;/span&gt;, HostId, System.Windows.Forms.MessageBoxButtons.YesNo)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; answer = System.Windows.Forms.DialogResult.Yes &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.macroProject.Save(&lt;span style="color:blue;"&gt;Nothing&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39;change the saved state&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.macroProject.Saved = &lt;span style="color:blue;"&gt;False&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39;quit the IDE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.mDTE.Quit()&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;End&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1451" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/VSTA.exe/default.aspx">VSTA.exe</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/File.Exit/default.aspx">File.Exit</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/IDE/default.aspx">IDE</category></item><item><title>Error when running setup- VSTAVersion</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/11/13/Error-when-running-setup_2D00_-VSTAVersion.aspx</link><pubDate>Thu, 13 Nov 2008 17:46:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1450</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;There is a somewhat confusing error that appears when running setup, if the registry entry VSTAVersion = 9.0 is not present.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The error states &amp;ldquo;Cannot find one or more components.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Please reinstall the application.&amp;rdquo;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;To correct this add the above registry entry (be sure to specify &amp;ldquo;9.0&amp;rdquo; not &amp;ldquo;2.0&amp;rdquo;) and re-run setup.&amp;nbsp; For more information on this, see &lt;a href="http://msdn.microsoft.com/en-us/library/cc176071.aspx"&gt;Host Configuration Registry Key Settings&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/Setup-Error-VSTAVersion.png" alt="" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1450" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/setup/default.aspx">setup</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/error/default.aspx">error</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/Cannot+find+one+or+more+components.++Please+reinstall+the+application/default.aspx">Cannot find one or more components.  Please reinstall the application</category></item><item><title>Generics Part I:  Generic Parameters of Intrinsic Types </title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/10/24/Generics-Part-I--Generic-Parameters-of-Intrinsic-Types-.aspx</link><pubDate>Fri, 24 Oct 2008 19:26:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1427</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;With VSTA v 2 it is possible to use generic parameters of intrinsic types with minimal effort.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The example below demonstrates this with a method added to the ShapeApp.Application class which accepts a List&amp;lt;string&amp;gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Steps:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;1)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Create the proxy file ignoring the ProxyGen warnings:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;ProxyGen.exe Warning: 21070 : Generics are not supported. The following types contain generic parameters and will be excluded. Its occurrences will be replaced by System.Object.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List`1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;2)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;In the proxy file, the generic types were replaced with System.Object.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Change the object type back to the type List&amp;lt;String&amp;gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;3)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;In the HostTypeMapProvider.GetTypeForCanonicalName, add a check for these types and return them if found.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;color:#000000;font-family:Times New Roman;"&gt;Host:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;using&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; System;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;using&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; System.Collections.Generic;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&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="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Application&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ReturnCount(&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; listToCount)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; listToCount.Count;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;HostTypeMapProvider:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;internal&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HostTypeMapProvider&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; System.&lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt; GetTypeForCanonicalName(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; canonicalName)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//default fetch from the dictionary&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (canonicalToTypeName.ContainsKey(canonicalName))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; canonicalToTypeName[canonicalName];&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//check for List&amp;lt;string&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (canonicalName.Contains(&lt;span style="color:#a31515;"&gt;&amp;quot;List&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; canonicalName.Contains(&lt;span style="color:#a31515;"&gt;&amp;quot;String&amp;quot;&lt;/span&gt;))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(System.Collections.Generic.&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Proxy:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt; : &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.&lt;span style="color:#2b91af;"&gt;MarshalByRefObject&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//change type from object to List&amp;lt;string&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::Microsoft.VisualStudio.Tools.Applications.Runtime. &lt;span style="color:#2b91af;"&gt;HostMemberAttribute&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;ReturnCount&amp;quot;&lt;/span&gt;, BindingFlags = &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.Reflection.&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.Reflection.&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public | &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.Reflection.&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.InvokeMethod)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//public virtual int ReturnCount(object listToCount) { throw new global::System.NotImplementedException(); }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ReturnCount(&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; listToCount) { &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.&lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;(); }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ApplicationEntryPoint&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#008000;"&gt;//change type from object to List&amp;lt;string&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//public virtual int ReturnCount(object listToCount)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ReturnCount(&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; listToCount)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RemoteObject.ReturnCount(listToCount);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1427" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/ProxyGen/default.aspx">ProxyGen</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/Proxy/default.aspx">Proxy</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/Generics/default.aspx">Generics</category></item><item><title>After ~5 minutes of idle time debugging macro projects fails with an IPC Port error.</title><link>http://yalecny.org/blogs/garyvsta/archive/2008/10/22/after-5-minutes-of-idle-time-debugging-macro-projects-fails-with-an-ipc-port-error.aspx</link><pubDate>Wed, 22 Oct 2008 20:00:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1419</guid><dc:creator>Gary</dc:creator><slash:comments>0</slash:comments><description>&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;After ~5 minutes of idle time, &amp;nbsp;VSTA macro projects are unable to debug and VSTA IDE displays a &amp;ldquo;Failed to write to an IPC Port:&amp;nbsp; The pipe is being closed&amp;rdquo;&amp;nbsp; or similar.&amp;nbsp; Second attempt produces this error message &amp;ldquo;Requested Service not found&amp;rdquo; error message dialog.&amp;nbsp; Loaded add-ins do not timeout (that was fixed in .Net 3.5 SP1).&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Periodically &amp;lsquo;Start Debugging&amp;rsquo; manually or programmatically (DTE.Debugger.Go()) debugging the open project prevents this problem from occurring, but this not an acceptable workaround . &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Steps to repro:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Build the ShapeAppMacroRecordingCSharp sample.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Run the associated setup .js&amp;nbsp;file.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Run the ShapeAppMacroRecordingCSharp sample.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Launch the IDE.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set a break point in the OnStartup method of the ide.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;6)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug from the IDE&amp;nbsp; and confirm the break point is hit when debugging.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;7)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Leave the host application and IDE idle for 5 minutes or more.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;8)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lsquo;Start&amp;rsquo; Debug from the IDE: &amp;ldquo;Failed to write to an IPC Port:&amp;nbsp; The pipe is being closed&amp;rdquo; message will appear.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;9)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lsquo;Start&amp;rsquo; Debug from the IDE again: &amp;ldquo;Requested Service not found&amp;rdquo; message will appear.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Solution:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;This is a bug in the sample.&amp;nbsp; The ShapeAppMacroRecordingCSharp sample should add InitializeLifetimeService() method with infinite timeout to the class VstaDesignTimeIntegration as shown below&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Provides Designtime VSTA Integration for ShapeAppCSharp.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; internal sealed class VstaDesignTimeIntegration : MarshalByRefObject, IExternalDebugHost&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region MarshalByRefObject&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override object InitializeLifetimeService()&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null; // Allows remoting from VS as long as we live.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion MarshalByRefObject&amp;nbsp; public override object InitializeLifetimeService()&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:&amp;#39;MS Shell Dlg&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . . .&lt;/span&gt;&lt;span style="font-size:11pt;color:#1f497d;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.25in;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1419" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/garyvsta/archive/tags/IPC+Port/default.aspx">IPC Port</category><category domain="http://yalecny.org/blogs/garyvsta/archive/tags/Debugger/default.aspx">Debugger</category><category domain="http://yalecny.org/blogs/garyvsta/archive/tags/InitializeLifetimeService/default.aspx">InitializeLifetimeService</category></item><item><title>Host Attributes in the Proxy File</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/10/17/Host-Attributes-in-the-Proxy-File.aspx</link><pubDate>Fri, 17 Oct 2008 13:39:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1383</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;In the proxy file, all types and non-static members in non-classEntryPoint types are marked with a host attribute.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The host attributes HostTypeAttribute and HostMemberAttribute are used to reconcile name changes.&amp;nbsp; When there is no name change the attribute is unnecessary.&amp;nbsp; The VSTA runtime uses this attribute, if available, to determine which type/member to call in the host.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;For example, in the descriptor file if we change the method name for Application.NewDocument to Application.UpdatedName_NewDocument, the method in the proxy will be called Application.UpdatedName_NewDocument and will have the HostMemberAttribute &amp;quot;NewDocument&amp;quot;.&amp;nbsp; If this attribute is removed VSTA will attempt to call Application.UpdatedName_NewDocument in the host and this will fail.&amp;nbsp; Similarly, if you change a HostMemberAttribute, VSTA will use the attribute name and the call will fail if no methods match the attribute name.&amp;nbsp; Also, if you switch attribute names, the method for the attribute will be called.&amp;nbsp;&amp;nbsp;This may be useful in some cases.&lt;br /&gt;&lt;br /&gt;Descriptor file:&lt;br /&gt;(Application class)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#a31515;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Method&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;originalName&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;NewDocument&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;newName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;UpdatedName_NewDocument&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;isExcluded&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;ReturnType&lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;ExternalTypeReference&lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="color:red;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;isInterface&lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;=&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;System.Void&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;ReturnType&lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:#a31515;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Method&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Proxy file:&lt;br /&gt;(Application class)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::Microsoft.VisualStudio.Tools.Applications.Runtime.HostMemberAttribute(&lt;span style="color:#a31515;"&gt;&amp;quot;NewDocument&amp;quot;&lt;/span&gt;, BindingFlags = &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.Reflection.&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.Reflection.&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public | &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.Reflection.&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.InvokeMethod)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; UpdatedName_NewDocument() { &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;global&lt;/span&gt;::System.&lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;(); }&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Calibri;"&gt;(ApplicationEntryPoint class)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; UpdatedName_NewDocument()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RemoteObject.UpdatedName_NewDocument();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Add-in:&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Me&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.UpdatedName_NewDocument&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.UpdatedName_NewDocument();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1383" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/Proxy/default.aspx">Proxy</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/Host+Attribute/default.aspx">Host Attribute</category></item><item><title>VSTA Documentation on MSDN</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/10/10/VSTA-Documentation-on-MSDN.aspx</link><pubDate>Fri, 10 Oct 2008 14:53:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1372</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;The MSDN site now includes &lt;a href="http://msdn.microsoft.com/en-us/library/cc175562.aspx"&gt;documentation for VSTA v 2.0&lt;/a&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The documentation available through the MSDN site is an updated version of the documentation included with the SDK.&amp;nbsp; Updates in the on-line documentation include sections on &lt;a href="http://msdn.microsoft.com/en-us/library/cc747850.aspx"&gt;how to properly expose structs&lt;/a&gt; and tips on debugging.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This site also provides a Community Content section where users can post helpful tips and workarounds.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175562.aspx"&gt;Click here to go to VSTA 2.0 on MSDN&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1372" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/help/default.aspx">help</category></item><item><title>Updated EventSample with EntryPoint Generic Event Handling</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/10/08/Updated-EventSample-with-EntryPoint-Generic-Event-Handling.aspx</link><pubDate>Wed, 08 Oct 2008 19:52:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1369</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There is a new sample up demonstrating generic event handling in entry point classes.&amp;nbsp; Click here to download &lt;a href="http://www.summsoft.com/media/p/1368.aspx"&gt;EventSample VB v2.1 &amp;ndash; Exposing Generic Events in Entry Point Classes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Excerpt&amp;nbsp;from EventSample VB v2.1 EventHandlerT in EntryPoint Classes.doc:&lt;/p&gt;
&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;At this time there is no direct way to expose an EventHandler&amp;lt;T&amp;gt; in the host to VSTA add-ins.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This sample uses a workaround which involves using non-generic event handling between the host and proxy, and generic event handling between the proxy and add-in.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This is accomplished by raising the non-generic events in the host and adding methods to the proxy to translate the events and event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The host and proxy must be modified; however, the host item provider and host type map provider do not require any alterations.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This workaround only works for generic events raised by the entry point class the add-in is based on.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;There is a separate workaround for generic events raised by other classes which is more involved.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This sample is a modified version of the Event Sample VB v 2.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;To run this sample, extract the zip file and run the included setup file SetupEventSample VB v 2.1.js.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Build the solution to move the proxy to the GAC and build the included sample add-in to load the assembly.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Both events hooked into the by the add-in will be triggered by entering a message into the input box and selecting &amp;ldquo;Add&amp;rdquo;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;The proxy and add-ins use tight versioning, the proxy assembly is marked as version 2.1 and the project templates included use this assembly as version specific.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;To use the included AutoProxyGen Input.xml file to regenerate the main proxy file, update the file locations (the proxy included will work so this is not necessary).&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Only one modification was done to the auto-generated proxy file, in the entry point class and it&amp;rsquo;s base the non-generic events were changed from public to private so that only the generic events are visible to add-ins.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Workaround Components:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li style="mso-list:l4 level1 lfo2;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Host&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;1)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define custom event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;2)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define an EventHandler&amp;lt;T&amp;gt; in the EntryPoint class using the custom event args (must be the entry point the add-in will be based on).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;3)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define a delegate using the custom event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will be used to communicate between the host and proxy.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;4)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define an event based on the delegate defined in 3 above.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will be used to communicate between the host and proxy.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpLast"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;5)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Anytime the EventHandler&amp;lt;T&amp;gt; is raised, raise the event based on the delegate, this event will trigger the EventHandler&amp;lt;T&amp;gt; in the proxy/add-in.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.5in;" class="MsoListParagraph"&gt;&lt;span style="font-size:x-small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li style="mso-list:l4 level1 lfo2;" class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Proxy&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;6)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Create the proxy as normal.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will define in the proxy:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l2 level2 lfo3;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;a.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The custom event args from 1.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l2 level2 lfo3;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;b.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The delegate using the custom event args from 3.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l2 level2 lfo3;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;c.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The event based on the delegate from 4 in both the class and the entry point class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This will skip:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l3 level1 lfo4;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;a.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The EventHandler&amp;lt;T&amp;gt; (all generics are skipped).&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;ProxyGen.exe Warning: 21040 : The following event type MainApplication contains generic type information and will not be parsed: cEventHandlerT.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;7)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Re-implement the custom EventArgs in the proxy while keeping the auto-generated custom EventArgs.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Do this by using a different name for the re-implemented custom event args, or nesting them in a class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;8)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Expand the partially defined entry point class in the proxy (suggest to do this is a separate code file) adding:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;a.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;A private event EventHandler&amp;lt;T&amp;gt; for the custom event args for internal use by the proxy.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Do not define the add and remove methods for this event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;b.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;A flag for the private event defined above initialized to false.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;c.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The EventHandler&amp;lt;T&amp;gt; defined in the host skipped by ProxyGen using the re-implemented event args deined in 7 above.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Define the add and remove methods for this event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In the Add method, hook the value passed in to the private event defined in 8a above.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Then, if the flag defined in 8b is false, hook the auto-generated generic event handler defined in the main proxy file to a new method to be defined in the expanded entry point class (defined below) and set the flag to true.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In the remove method, remove the value from the private event defined in 8a above.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;d.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Add a method which satisfies the signature for the generic event handling, using the original event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In this method, translate the original event args to the re-implemented event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Use the re-implemented event args to raise the private event defined in 3a.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;9)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Expand the partially defined class in the proxy adding the EventHandler&amp;lt;T&amp;gt; (suggest to do this in the same separate code file).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://yalecny.org/aggbug.aspx?PostID=1369" width="1" height="1"&gt;</description><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/event+handling/default.aspx">event handling</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/EventHandling/default.aspx">EventHandling</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/Generics/default.aspx">Generics</category><category domain="http://yalecny.org/blogs/melodys_vsta_blog/archive/tags/EventHandler_2600_lt_3B00_T_2600_gt_3B00_/default.aspx">EventHandler&amp;lt;T&amp;gt;</category></item><item><title>Tools to Automate VSTA 2 Integrations:  AutoProxyGen and Templates</title><link>http://yalecny.org/blogs/melodys_vsta_blog/archive/2008/10/01/Tools-to-Automate-VSTA-2-Integrations-AutoProxyGen-and-Templates.aspx</link><pubDate>Wed, 01 Oct 2008 19:48:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1361</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><description>&lt;div&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;
&lt;p&gt;We have new downloads up including templates and a new tool AutoProxyGen which automates ProxyGen and can be used in build events.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.summsoft.com/media/p/1355.aspx"&g