<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.summsoft.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Melody's VSTA Blog</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/default.aspx</link><description>Get the latest and greatest information on VSTA here!  Find new samples, workarounds, and inside tips in our downloads and blogs.  Get your questions answered quickly in our forums or search our site for a FAQ.  We&amp;#39;re here to help- just ask.</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>How to: Prompt the User to Save Unsaved Files</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/06/19/how-to-prompt-the-user-to-save-unsaved-files.aspx</link><pubDate>Fri, 19 Jun 2009 15:14:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1864</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1864</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/06/19/how-to-prompt-the-user-to-save-unsaved-files.aspx#comments</comments><description>&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;A useful function the DTE has a built in is to prompt the user to save any unsaved files.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It is a good idea to make this call in when shutting down the DTE, for example in the disconnect method of the VstaDesignTimeIntegration class.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&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:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="font-size:small;"&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;vsPromptResult&lt;/span&gt; promptResult = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.dte.ItemOperations.PromptToSave;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:small;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;Below is a modified VstaDesignTimeIntegration.Disconnect method from the ShapeAppMacroRecordingCSharp SDK sample with this call added.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The prompt will appear whether or not the DTE is visible&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;font-size:small;mso-no-proof:yes;"&gt;internal&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:small;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Disconnect()&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;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 style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;//prompt the user to save any unsaved files&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;"&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="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;vsPromptResult&lt;/span&gt; promptResult = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.dte.ItemOperations.PromptToSave;&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;/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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.isShuttingDown = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;"&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;&amp;nbsp; &lt;/span&gt;StopDebugging(&lt;span style="color:#0000ff;"&gt;true&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;&amp;nbsp;&lt;/span&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:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;// Unload external process&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;span style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:small;"&gt;try&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;span style="font-size:small;"&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&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="font-size: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;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroAddInProcess != &lt;span style="color:#0000ff;"&gt;null&lt;/span&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:small;"&gt;&lt;span style="font-size: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;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;span style="font-size: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;.macroAddInProcess.ShuttingDown -= MacroAddInProcessExiting;&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;span style="font-size: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;.macroAddInProcess.Shutdown();&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;span style="font-size: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;.macroAddInProcess = &lt;span style="color:#0000ff;"&gt;null&lt;/span&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:small;"&gt;&lt;span style="font-size: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;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;span style="font-size:small;"&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&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="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; ex)&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;span style="font-size:small;"&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&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;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008000;font-size:small;"&gt;//&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Swallow the exception. We don&amp;#39;t want to crash if the process has already been destroyed.&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;span style="font-size: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;System.Diagnostics.&lt;span style="color:#2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(ex.ToString());&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&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="font-size:small;"&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:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/Prompt.png" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1864" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Save/default.aspx">Save</category></item><item><title>Frequent Events and Garbage Collection</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/06/17/frequent-events-and-garbage-collection.aspx</link><pubDate>Wed, 17 Jun 2009 14:46:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1855</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1855</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/06/17/frequent-events-and-garbage-collection.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;When an event will be fired many times it is a good practice to do periodic garbage collection.&amp;nbsp; When a VSTA add-in hooks into an event which is fired many times this becomes even more important because the memory usage for the host process will grow very high without periodic garbage collection.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;The charts below demonstrate that when a VSTA add-in is hooked into an event the memory usage grows.&amp;nbsp; This is case even if the VSTA add-in does not perform any actions when the event is fired (see the &amp;quot;Empty VSTA Event Hooked-up&amp;quot; line in Chart 1).&amp;nbsp; If the VSTA add-in does perform actions when the event is fired the memory usage will grow even faster (see the &amp;quot;VSTA Event Hooked-up&amp;quot; line in Chart 1).&amp;nbsp; When GC.Collect is called periodically this increase in memory usage is almost completely negated; notice in Chart 1 the base line &amp;quot;No VSTA Event Hooked-up&amp;quot; is at the same memory usage levels as the lines where garbage collection is called periodically (&amp;quot;VSTA Event Hooked-up &amp;amp; Host call GC every 50 event fires&amp;quot; and &amp;quot;VSTA Event Hooked-up &amp;amp; Host call GC every 500 event fires&amp;quot;).&amp;nbsp; These three lines, the base and lines where periodic garbage collection is done, are displayed again in Chart 2 to show how close the memory usage levels are.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;strong&gt;Chart 1- Memory Usage Levels With and Without Periodic Garbage Collection &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;img src="http://www.summsoft.com/resized-image.ashx/__size/727x270/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/Without-GC.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;
&lt;p&gt;&lt;strong&gt;Chart 2- Memory Usage Levels With Periodic Garbage Collection&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;
&lt;p&gt;&lt;img src="http://www.summsoft.com/resized-image.ashx/__size/727x270/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/With-GC.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;This applies to both VSTA v 1 and VSTA v 2.&lt;/span&gt;&lt;/p&gt;
&lt;/span&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://www.summsoft.com/aggbug.aspx?PostID=1855" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Event/default.aspx">Event</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Memory+Usage/default.aspx">Memory Usage</category></item><item><title>VSTA Configuration Entries: ItemTemplatesLocation versus VSItemTemplatesLocation</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/05/29/vsta-configuration-entries-itemtemplateslocation-versus-vsitemtemplateslocation.aspx</link><pubDate>Fri, 29 May 2009 15:55:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1820</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1820</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/05/29/vsta-configuration-entries-itemtemplateslocation-versus-vsitemtemplateslocation.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;"&gt;The ItemTemplatesLocation entry in the VSTA host configuration hive is used to specify the location of item templates which will only be available through the VSTA host they are registered under. This is different than the VSItemTemplatesLocation entry which is used to specify the location of item templates which will be available through Visual Studio 2008 and all VSTA hosts.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;To use the ItemTemplatesLocation entry,&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:small;"&gt;1) Delete the context hive for the host. This must be done for the changes to take affect even if the ItemTemplatesLocation entry was not used previously.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:small;"&gt;2) Add the ItemTemplatesLocation entry and value to the configuration hive.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:small;"&gt;3) Run vsta setup for the host. This will extract the item templates to the VSTA item templates cache under C:\Documents and Settings\All Users\Application Data\Microsoft\VSTAHost\&amp;lt;HostID&amp;gt;\9.0\ItemTemplatesCache&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;The item templates stored in the ItemTemplatesLocation will now appear under the root node in the Add New Item Wizard and will not be available for other hosts or Visual Studio projects.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/Host-ItemTemplate.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;The VSItemTemplatesLocation entry requires the following steps to function properly:&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:small;"&gt;1) Add the VSItemTemplatesLocation entry and value to the configuration hive.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:small;"&gt;2) Run vsta setup for the host. This will move the item templates from the location specified in the VSItemTemplatesLocation to the Visual Studio 2008 item templates folder under a subfolder matching the hosted: %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\Host ID.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:small;"&gt;3) Run devenv setup. Once vsta setup has moved the templates from the VSItemTemplatesLocation to the Visual Studio item templates storage folder you must run devenv setup to extract the item templates to the Visual Studio and VSTA item templates caches.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;The item templates will appear in a category which matches the HostID under the Add New Item wizard.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/Host-VSItemTemplate.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;For more information on this, see the on-line documentation on &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc176071.aspx" title="MSDN:  Host Configuration Registry Key Settings"&gt;&lt;span style="font-size:small;"&gt;Host Configuration Registry Key Settings&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-size:small;"&gt;ItemTemplatesLocation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;If you create custom item templates for Visual Studio Tools for Applications projects, use this entry to provide a path to those templates. These items will appear in the Add New Item dialog box of the Visual Studio Tools for Applications IDE. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;When you install Visual Studio Tools for Applications or run vsta.exe using the /setup&amp;nbsp;switch, Visual Studio Tools for Applications does the following: &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size:small;"&gt;Copies the value of ItemTemplatesLocation to the UserFolder entry of the following key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSTAHost\host ID\9.0\VSTemplate\Item. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:small;"&gt;Extracts the .zip files from the path that was copied to the UserFolder entry and places the files in %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache. &lt;b&gt;CORRECTION: the item template is not extracted to this location, but instead to C:\Documents and Settings\All Users\Application Data\Microsoft\VSTAHost\&amp;lt;HostID&amp;gt;\9.0\ItemTemplatesCache&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-size:small;"&gt;VSItemTemplatesLocation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;If you create custom item templates for Visual Studio 2008 projects, use this entry to provide a path to those templates. These items will appear in the Add New Item dialog box of Visual Studio. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;When you install Visual Studio Tools for Applications or run vsta.exe using the /setup switch, Visual Studio Tools for Applications copies the contents of the directory specified by the VSItemTemplatesLocation entry to %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\Host ID. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;You must then regenerate the Visual Studio 2008 template cache so it includes the new templates. You can accomplish this by running devenv.exe using the /setup switch. Devenv.exe is usually located at %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE, but it can be installed in another location if the user overrides the default location. If you need to regenerate the template cache programmatically, you can locate devenv.exe by reading the InstallDir registry entry at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0. For more information, see &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/xee0c8y7.aspx" title="MSDN:  Devenv Command Line Switches" id="ctl00_MTContentSelector1_mainContentContainer_ctl31"&gt;&lt;span style="font-size:small;"&gt;Devenv Command Line Switches&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1820" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/ItemTemplatesLocation/default.aspx">ItemTemplatesLocation</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSItemTemplatesLocation/default.aspx">VSItemTemplatesLocation</category></item><item><title>The Host Item Node in VSTA Projects</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/05/26/the-host-item-node-in-vsta-projects.aspx</link><pubDate>Tue, 26 May 2009 16:39:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1779</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1779</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/05/26/the-host-item-node-in-vsta-projects.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Within a VSTA project there is a&amp;nbsp;Host Item&amp;nbsp;Node.&amp;nbsp; This displays in the Project Explorer as a subfolder within the VSTA project and contains the main code file as well as any DPM files.&amp;nbsp; By default the folder&amp;#39;s name is the HostID and the icon is the open or closed folder icon.&amp;nbsp; These settings can be changed in the project template under the Host node in the ProjectExtensions section.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/ProjectFolder-upd.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;VSTA host item specific code files are stored here so that they may be accessed through &lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;IVstaHostAdapter&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;.ProjectHostItems&lt;/span&gt;.&amp;nbsp; The SDK samples demonstrate this in the Macro Recording and Dynamic Programming Model samples (see code below). &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;&amp;nbsp;
&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;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; This section defines properties that apply to HostItems.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#008000;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="color:#008000;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;Host - Properties of the folder node in the project.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#008000;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;Name - The display name of the folder node.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#008000;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;GeneratedCodeNamespace - Namespace of code files contained in the folder node. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#008000;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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Used by the Properties window in Project Explorer. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#008000;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;IconIndex - 0-based index in the IconImageList of the icon for this node.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#008000;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;OpenFolderIconIndex - 0-based index in the IconImageList of the open folder icon for this node.&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:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;--&amp;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;&lt;span style="mso-spacerun:yes;"&gt;&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;Host&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&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;span style="mso-spacerun:yes;"&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="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;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:#ffff99;"&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;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:#0000ff;"&gt;ShapeAppCSharp AddIn Folder&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&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;&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;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;GeneratedCodeNamespace&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&lt;span style="color:#0000ff;"&gt;$safeprojectname$&lt;/span&gt;&amp;quot;&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;&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;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;IconIndex&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&amp;quot;&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;&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="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;OpenFolderIconIndex&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&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;&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;&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;HostItem&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn&lt;/span&gt;&amp;quot;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Code&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn.cs&lt;/span&gt;&amp;quot;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;CanonicalName&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn&lt;/span&gt;&amp;quot;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Blueprint&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn.Designer.xml&lt;/span&gt;&amp;quot;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;GeneratedCode&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn.designer.cs&lt;/span&gt;&amp;quot;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;IconIndex&lt;/span&gt;&lt;span style="color:#0000ff;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;&amp;quot;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&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;&lt;span style="mso-spacerun:yes;"&gt;&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;Host&lt;/span&gt;&lt;span style="color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;strong&gt;Macro Recording Sample:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&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;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;void&lt;/span&gt; SaveMacro(System.CodeDom.&lt;span style="color:#2b91af;"&gt;CodeMemberMethod&lt;/span&gt; method)&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&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject == &lt;span style="color:#0000ff;"&gt;null&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; &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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!ShowIde(&lt;span style="color:#0000ff;"&gt;false&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;return&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; &lt;/span&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&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IVstaHostAdapter&lt;/span&gt; hostAdapter = (&lt;span style="color:#2b91af;"&gt;IVstaHostAdapter&lt;/span&gt;)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject.get_Extender(&lt;span style="color:#a31515;"&gt;&amp;quot;VSTAHostAdapter2007&amp;quot;&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;&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; hostItemFileName = &lt;b style="mso-bidi-font-weight:normal;"&gt;hostAdapter.ProjectHostItems&lt;/b&gt;[0].CodeFilePath;&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; hostItemClassName = &lt;b style="mso-bidi-font-weight:normal;"&gt;hostAdapter.ProjectHostItems&lt;/b&gt;[0].ProgrammingModelHostItem.Identifier;&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; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;ProjectItem&lt;/span&gt; hostItemProjectItem =&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;this&lt;/span&gt;.macroProject.ProjectItems.Item(&lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetFileName(hostItemFileName));&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; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;CodeClass&lt;/span&gt; hostItemClass = FindClass(hostItemClassName, hostItemProjectItem.FileCodeModel.CodeElements);&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;/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; &lt;/span&gt;method.Name = GenerateNewMacroName(hostItemClass);&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;/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; &lt;/span&gt;hostItemProjectItem.Open(&lt;span style="color:#a31515;"&gt;&amp;quot;{7651A701-06E5-11D1-8EBD-00A0C90F26EA}&amp;quot;&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;&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; &lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;hostAdapter.ProjectHostItems&lt;/b&gt;[0].AddMethod(method);&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; &lt;/span&gt;hostItemProjectItem.Save(&lt;span style="color:#0000ff;"&gt;null&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;&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.macroProject.DTE.Solution.SolutionBuild.Build(&lt;span style="color:#0000ff;"&gt;true&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&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;strong&gt;Dynamic Programming Model Sample&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&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;private&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#2b91af;"&gt;IVstaProjectHostItem&lt;/span&gt; AddProjectHostItemInternal(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; itemName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; templateName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; itemEntryPoint)&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&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;IVstaProjectHostItem&lt;/span&gt; existingItem &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.hostAdapter.ProjectHostItems&lt;/b&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; &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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (existingItem.ProgrammingModelHostItem.Cookie == itemName)&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;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;; &lt;span style="color:#008000;"&gt;// Do not add existing one.&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; &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;&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; &lt;/span&gt;&lt;span style="color:#008000;"&gt;// Make sure the template is not read-only.&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; languageFolder = &lt;span style="color:#0000ff;"&gt;null&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; languageExtension = &lt;span style="color:#0000ff;"&gt;null&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.language == &lt;span style="color:#2b91af;"&gt;SupportedLanguage&lt;/span&gt;.CSharp)&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; &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; &lt;/span&gt;languageFolder = &lt;span style="color:#a31515;"&gt;&amp;quot;CSharp&amp;quot;&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; &lt;/span&gt;languageExtension = &lt;span style="color:#a31515;"&gt;&amp;quot;.cs&amp;quot;&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; &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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;else&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; &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; &lt;/span&gt;languageFolder = &lt;span style="color:#a31515;"&gt;&amp;quot;VisualBasic&amp;quot;&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; &lt;/span&gt;languageExtension = &lt;span style="color:#a31515;"&gt;&amp;quot;.vb&amp;quot;&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; &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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; templatePath = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.hostItemTemplatesPath + &lt;span style="color:#a31515;"&gt;@&amp;quot;\&amp;quot;&lt;/span&gt; + languageFolder + &lt;span style="color:#a31515;"&gt;@&amp;quot;\&amp;quot;&lt;/span&gt; + templateName + languageExtension;&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FileInfo&lt;/span&gt; fileInfo = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FileInfo&lt;/span&gt;(templatePath);&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isReadOnly = fileInfo.IsReadOnly;&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; &lt;/span&gt;fileInfo.IsReadOnly = &lt;span style="color:#0000ff;"&gt;false&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IVstaProjectHostItem&lt;/span&gt; projectHostItem = &lt;span style="color:#0000ff;"&gt;null&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&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; &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; &lt;/span&gt;projectHostItem = &lt;b style="mso-bidi-font-weight:normal;"&gt;hostAdapter.ProjectHostItems&lt;/b&gt;.AddProjectHostItem(&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;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;itemName,&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;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Microsoft.VisualStudio.Tools.Applications.Samples.ShapeApp.&amp;quot;&lt;/span&gt; + itemEntryPoint,&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;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Microsoft.VisualStudio.Tools.Applications.Runtime.IEntryPoint&amp;quot;&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;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;itemName,&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;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.hostItemTemplatesPath + &lt;span style="color:#a31515;"&gt;@&amp;quot;\&amp;quot;&lt;/span&gt; + languageFolder + &lt;span style="color:#a31515;"&gt;@&amp;quot;\&amp;quot;&lt;/span&gt; + templateName);&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;this&lt;/span&gt;.project.Save(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.project.FileName);&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;/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; &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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;finally&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; &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; &lt;/span&gt;fileInfo.IsReadOnly = isReadOnly;&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; &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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (projectHostItem != &lt;span style="color:#0000ff;"&gt;null&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; projectHostItem;&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;else&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;InvalidOperationException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Fail to add project host item.&amp;quot;&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;&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&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&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://www.summsoft.com/aggbug.aspx?PostID=1779" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/addin/default.aspx">addin</category></item><item><title>Saving DTE and other COM Event Hook-ups</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/29/saving-dte-and-other-com-event-hook-ups.aspx</link><pubDate>Wed, 29 Apr 2009 15:00:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1741</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1741</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/29/saving-dte-and-other-com-event-hook-ups.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;To avoid losing an event hook-up from a COM source it is necessary to hold a local reference to the source of the event to avoid unwanted garbage collection.&amp;nbsp; This is a concern for VSTA hosts hooking into DTE events as well as VSTA add-ins which use a direct reference to a COM host instead of a proxy.&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;For example, in the SDK the DTE source events are each saved in a local variable and hooked into from these variables.&amp;nbsp; If you attempt to hook into the events without saving event sources the hook-ups can be lost.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;To test if an event hookup will preset, call GC.Collect in the event sink and re-fire.&amp;nbsp; If the event is hit again the hookup should persist. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Example of how to hook into DTE events from a host:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;When events sources are saved, event hookups will continue to work after garbage collection.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&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;private&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; EnvDTE.&lt;span style="color:#2b91af;"&gt;BuildEvents&lt;/span&gt; buildEvents;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; HookupDteEvents_GOOD()&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;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 style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#008000;"&gt;// Save a copy of the event sync locations so they don&amp;#39;t get&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;span style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#008000;"&gt;// garbage collected.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&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="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.buildEvents = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.dte.Events.BuildEvents;&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;/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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.buildEvents.OnBuildBegin += &lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:#0000ff;"&gt;new&lt;br /&gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;_dispBuildEvents_OnBuildBeginEventHandler&lt;/span&gt;(buildEvents_OnBuildBegin);&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:small;"&gt;&lt;span style="font-size:small;"&gt;}&lt;br style="mso-special-character:line-break;" /&gt;&lt;br style="mso-special-character:line-break;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;void&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; buildEvents_OnBuildBegin(EnvDTE.&lt;span style="color:#2b91af;"&gt;vsBuildScope&lt;/span&gt; Scope,&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;vsBuildAction&lt;/span&gt; Action)&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:small;"&gt;&lt;span style="font-size:small;"&gt;&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="MsoNormal"&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="font-size:small;"&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;//Call GC.Collect to test if the event hookup will persist&lt;/span&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Windows.Forms.&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(&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:small;"&gt;&lt;span style="font-size: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; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Call GC.Collect after firing event to test hook-up&amp;quot;&lt;/span&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:small;"&gt;&lt;span style="font-size:small;"&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;GC&lt;/span&gt;.Collect();&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Example of how &lt;b&gt;NOT&lt;/b&gt; to hook into DTE events from a host:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;When events sources are not saved, event hookups will not continue to work after garbage collection.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; HookupDteEvents_BAD()&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;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 style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#008000;"&gt;// DON&amp;rsquo;T DO THIS&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;span style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#008000;"&gt;// Hook into the event through the dte w/o saving source&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;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.dte.Events.BuildEvents.OnBuildBegin +=&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:#0000ff;"&gt;new&lt;br /&gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;_dispBuildEvents_OnBuildBeginEventHandler&lt;/span&gt;(buildEvents_OnBuildBegin);&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:small;"&gt;&lt;span style="font-size:small;"&gt;}&lt;br style="mso-special-character:line-break;" /&gt;&lt;br style="mso-special-character:line-break;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;void&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; buildEvents_OnBuildBegin(EnvDTE.&lt;span style="color:#2b91af;"&gt;vsBuildScope&lt;/span&gt; Scope,&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&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="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EnvDTE.&lt;span style="color:#2b91af;"&gt;vsBuildAction&lt;/span&gt; Action)&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 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="MsoNormal"&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="font-size:small;"&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;//Call GC.Collect to test if the event hookup will persist&lt;/span&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Windows.Forms.&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(&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:small;"&gt;&lt;span style="font-size: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; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Call GC.Collect after firing event to test hook-up&amp;quot;&lt;/span&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:small;"&gt;&lt;span style="font-size:small;"&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;GC&lt;/span&gt;.Collect();&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:small;"&gt;&lt;span style="font-size:small;"&gt;&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&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Example of how to hook into host events from an add-in using a direct reference to a COM host:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;When events sources are saved, event hookups will continue to work after garbage collection.&amp;nbsp; From &lt;a href="http://www.summsoft.com/media/p/1721.aspx" title="Summit Sample"&gt;MyAppVB6 sample&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; AppAddIn_Startup(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&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;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&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="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Document.KeyPress += &lt;span style="color:#0000ff;"&gt;new&lt;/span&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: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;__Document_KeyPressEventHandler(Document_KeyPress);&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;/span&gt;&lt;/span&gt;&lt;/p&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;doc = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Document;&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;doc.KeyPress += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&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:small;"&gt;&lt;span style="font-size: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;__Document_KeyPressEventHandler(doc_KeyPress);&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//if the local variable is saved, hooking into this.Document will work&lt;br /&gt;&lt;/span&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;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//this.Document.KeyPress += new&amp;nbsp;&lt;br /&gt;&lt;/span&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;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;__Document_KeyPressEventHandler(Document_KeyPress);&lt;/span&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:small;"&gt;&lt;span style="font-size:small;"&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:small;"&gt;&lt;span style="font-size:small;"&gt;Document doc;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&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;void&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; doc_KeyPress(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;short&lt;/span&gt; KeyCode)&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;span style="font-size:small;"&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Windows.Forms.MessageBox.Show(&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;span style="font-size: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:#a31515;"&gt;&amp;quot;Hooking into this.Document with saving it won&amp;#39;t work&amp;quot;&lt;/span&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;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;GC.Collect();&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&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="font-size:small;"&gt;}&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Example of how &lt;b&gt;NOT&lt;/b&gt; to hook into host events from an add-in using a direct reference to a COM host:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;When events sources are not saved, event hookups will not continue to work after garbage collection. From &lt;a href="http://www.summsoft.com/media/p/1721.aspx" title="Summit Sample"&gt;MyAppVB6 sample&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size:small;"&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;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; AppAddIn_Startup(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/span&gt;&lt;/span&gt;&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="font-size:small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&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="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Document.KeyPress += &lt;span style="color:#0000ff;"&gt;new&lt;/span&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: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;__Document_KeyPressEventHandler(Document_KeyPress);&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;br /&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="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&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;void&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; Document_KeyPress(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;short&lt;/span&gt; KeyCode)&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;span style="font-size:small;"&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Windows.Forms.MessageBox.Show(&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;span style="font-size: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:#a31515;"&gt;&amp;quot;Hooking into this.Document w/o saving it won&amp;#39;t work&amp;quot;&lt;/span&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;&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:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;GC.Collect();&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;span style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&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://www.summsoft.com/aggbug.aspx?PostID=1741" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/addin/default.aspx">addin</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Proxy/default.aspx">Proxy</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/COM/default.aspx">COM</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/EnvDTE/default.aspx">EnvDTE</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/DTE/default.aspx">DTE</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/COM+Event/default.aspx">COM Event</category></item><item><title>VSTA v 2 Proxy Names- Unique Names for Proxy Versions</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/28/VSTA-v-2-Proxy-Names_2D00_-Unique-Names-for-Proxy-Versions.aspx</link><pubDate>Tue, 28 Apr 2009 15:00:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1739</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1739</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/28/VSTA-v-2-Proxy-Names_2D00_-Unique-Names-for-Proxy-Versions.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;For VSTA v 2 Visual Basic add-ins, unique version specific proxy names are required for registration in the VSTA pipeline.&amp;nbsp; Also, each host should use host specific names for all proxies.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;If multiple versions of a proxy will be used by VSTA v 2 Visual Basic add-ins, the different versions of the proxy must each have a unique name.&amp;nbsp; This will avoid a proxy being overwritten in the VSTA pipeline folder by another proxy with the same name but different version number.&amp;nbsp; This is not an issue for C# add-ins because they can resolve the reference to the proxy assembly in the GAC; however, for Visual Basic add-ins this is a requirement.&lt;/p&gt;
&lt;p&gt;All proxies should have a host specific name.&amp;nbsp; This will avoid file naming collisions in the VSTA pipeline with other hosts, which can result in a proxy being overwritten in the pipeline and Visual Basic add-ins being unloadable (VSTA v 2).&amp;nbsp; This will also avoid any ambiguity in the GAC (VSTA v 1 and v 2).&amp;nbsp; For example an add-in could reference a proxy with the same name as another proxy present in the GAC and end up referencing the first instance of a proxy in the GAC with the same name instead of the intended proxy (see the section on loose versioning in the &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:  Proxy Versioning Options"&gt;Proxy Versioning Options for Project Templates blog&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;Example Proxy Names:&lt;br /&gt;&lt;strong&gt;BAD&lt;/strong&gt;- VSTAProxy &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GOOD&lt;/strong&gt;- HostA_VSTAProxy_v1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Related blogs:&lt;br /&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:  Proxy Versioning Options"&gt;Proxy Versioning Options for Project Templates&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/26/Proxy-Assembly-Registration_2D00_-Unique-Name-Required.aspx" title="Summit Blog- Proxy Assembly Registration"&gt;Proxy Assembly Registration- Unique Name Required&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc176064.aspx#installingassembly" title="MSDN VSTA v 2:  Creating Proxies"&gt;Creating Proxies- Installing the Proxy Assembly with the Host Application&lt;/a&gt;&lt;/p&gt;
&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;
&lt;p&gt;VSTA Pipeline location:&lt;br /&gt;C:\Program Files\Common Files\Microsoft Shared\VSTA\Pipeline&lt;/p&gt;
&lt;p&gt;Proxy assemblies are stored in:&lt;br /&gt;C:\Program Files\Common Files\Microsoft Shared\VSTA\Pipeline\AddInViews&lt;/p&gt;
&lt;/p&gt;
&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://www.summsoft.com/aggbug.aspx?PostID=1739" width="1" height="1"&gt;</description></item><item><title>VSTA and Packaging</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/07/vsta-and-packaging.aspx</link><pubDate>Tue, 07 Apr 2009 17:08:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1724</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1724</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/07/vsta-and-packaging.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;A new sample and video are available which demonstrate packaging a VSTA add-in within a document using System.IO.Packaging.&amp;nbsp; Packaging is also used by Office 2007 documents including the &amp;quot;docx&amp;quot;, &amp;quot;docm&amp;quot;, &amp;quot;xlsx&amp;quot;, and &amp;quot;xlsm&amp;quot; file types.&amp;nbsp; In this sample, both the add-in source code and compiled assembly are packaged into the single file document which can be transferred (ex:&amp;nbsp; e-mailed) and opened by another user who through the single file will have access to the document, compiled add-in and source code- similar to an Office document with a VBA macro project included.&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;This sample is document-centric, so the add-in is intended only for use with the document it is packaged within.&amp;nbsp; Based on the ShapeAppDynamicProgrammingModelCSharp SDK sample, this sample extends the existing packaging file format of the SDK samples to include the VSTA add-in associated with the document.&amp;nbsp; Benefits of packaging document specific VSTA add-ins within documents include ease of deployment and an intuitive end user experience.&amp;nbsp;&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;Technical&amp;nbsp;stuff:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;The main code changes made to the SDK sample ShapeAppDynamicProgrammingModelCSharp for packaging are in methods involved with saving and opening documents in the document.cs file.&amp;nbsp; The add-in project associated with the document is originally created in the same folder as the document.&amp;nbsp; A copy of the project and add-in are packaged into the document while the originals stay in place.&amp;nbsp; This allows the add-in project to be updated outside of the document, and logic was added to use the original project and add-in if available.&amp;nbsp; If the project or add-in is no longer available then the internal copy is used.&amp;nbsp; The internal copy is updated every time the document is saved.&amp;nbsp; This provides a more dev oriented experience, allowing the add-in project to be modified outside of the document, but may not be optimal for non-dev end users.&amp;nbsp; The add-in project source code and assembly are packaged within the document so the only required file is the single document file.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;The ShapeAppDynamicProgrammingModelCSharp sample was also updated to include seamless non-destructive debugging; a side effect of this is the add-in projects cannot be run directly because they search for a running instance of the host instead of starting a new one.&amp;nbsp; Therefore, to run a DPM packaged project, open the document through the host instead of debugging from a standalone VSTA IDE.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Note, this is not ClickOnce deployment, for information on ClickOnce deployment please refer to the SDK section &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175947.aspx"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Securing and Deploying Add-Ins&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&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;Links:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;a href="http://www.summsoft.com/media/p/1725.aspx" title="Summit Sample"&gt;Summit:&amp;nbsp; Link to Sample&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;a href="http://www.summsoft.com/blogs/videos/archive/2009/04/07/vsta-and-packaging.aspx" title="Summit Video"&gt;Summit:&amp;nbsp; Link to Video&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175731.aspx" title="MSDN VSTA SDK"&gt;MSDN:&amp;nbsp; Add-in Debugging&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175988.aspx" title="MSDN VSTA SDK"&gt;MSDN:&amp;nbsp; DPM Walkthrough&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" title="MSDN Library"&gt;MSDN:&amp;nbsp; System.IO.Packaging&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;a href="http://blogs.msdn.com/brian_jones/archive/2005/06/06/425750.aspx" title="MSDN Blog"&gt;MSDN:&amp;nbsp; Office Packaging&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1724" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Packaging/default.aspx">Packaging</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/DynamicProgrammingModel/default.aspx">DynamicProgrammingModel</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/DPM/default.aspx">DPM</category></item><item><title>VSTA v 2 in Visual Basic 6.0 sample now available</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/06/vsta-v-2-in-visual-basic-6-0-sample-now-available.aspx</link><pubDate>Mon, 06 Apr 2009 18:30:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:970</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=970</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/06/vsta-v-2-in-visual-basic-6-0-sample-now-available.aspx#comments</comments><description>&lt;p&gt;&lt;span&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;A new &lt;a href="http://www.summsoft.com/media/p/1721.aspx" title="Summit Sample"&gt;VB6 VSTA v 2&lt;/a&gt; sample is available for download.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Below is from the READ ME.doc included in the sample:&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;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There are many ways to integrate VSTA v 2.0 with a VB6 application.&amp;nbsp; This sample demonstrates an advanced integration option (with seamless non-destructive debugging but no macro management) which closely follows the integration code from the SDK samples.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A COM visible library, VSTA2_Integration, is referenced by the VB6 host application, MyAppVB6.&amp;nbsp; The VSTA2_Integration library exposes the classes VSTARunTimeIntegration and VstaDesignTimeIntegration.&amp;nbsp; The VB6 host first creates and connects to its VSTARunTimeIntegration instance passing in the object to be used as an entry point (see definition below) for add-ins through the VSTARunTimeIntegration.Connect method.&amp;nbsp; Then the VB6 host creates and connects to its VSTADesignTimeIntegration instance passing in the VSTARunTimeIntegration instance through the VSTADesignTimeIntegration.Connect method.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This host object (passed in through the VSTARunTimeIntegration.Connect method) is stored in the internal VSTA2_Integration.HostItemProvider (see definition below) which is passed into the add-ins through the VSTA pipeline.&amp;nbsp; Once the host object is passed through the pipeline, it is stored in the add-in in a hidden code file and accessed through &amp;ldquo;Me&amp;rdquo; or &amp;ldquo;Me.Application&amp;rdquo; (see section on templates below).&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The VSTARunTimeIntegration.Connect method makes calls to load add-ins and the VSTARunTimeIntegration.Disconnect method makes calls to unload add-ins.&amp;nbsp; The VB6 host calls the VSTARunTimeIntegration.Connect method on form load, and VSTARunTimeIntegration.Disconnect on form unload.&amp;nbsp; This can easily be changed so that add-ins can be loaded and unloaded by selecting a button on the host.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The DesignTimeIntegration.Connect method takes in and stores the VSTARunTimeIntegration instance and prepares for IDE management.&amp;nbsp; The DesignTimeIntegration.ShowIDE method displays the IDE with a new or existing VSTA project open.&amp;nbsp; The DesignTimeIntegration.Disconnect method disposes of the IDE.&amp;nbsp; The VB6 host calls the DesignTimeIntegration.Connect on form load and the DesignTimeIntegration.Disconnect on form unload.&amp;nbsp; It is not advisable to change this.&amp;nbsp; The ShowIDE method is called through a button on the VB6 host.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This sample does not use a proxy or HostTypeMapProvider, instead a &amp;ldquo;proxy shim&amp;quot; is included in the add-in to provide a MyAppVB6 entry point.&amp;nbsp; This class is defined in the hidden AppAddIn.designer2.xx file included with the project templates.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Two sets of templates are included with this sample.&amp;nbsp; The &amp;ldquo;MyAppVB6_VSTA2_Template_Robust.zip&amp;rdquo; templates allow the add-in to access the host object through &amp;ldquo;Me&amp;rdquo; or &amp;ldquo;this&amp;rdquo;.&amp;nbsp; The &amp;ldquo;MyAppVB6_VSTA2_Template.zip&amp;rdquo; templates allow the add-in to access the host object through &amp;ldquo;Me.Application&amp;rdquo; or &amp;ldquo;this.Application&amp;rdquo;.&amp;nbsp; For the robust templates, the hidden file AppAddIn.designer2.xx contains code which re-implements/exposes some or all of the entry point type from the VB6 host.&amp;nbsp; The only benefit to this additional code is it allows the host object to be accessed more directly through &amp;ldquo;Me&amp;rdquo; or &amp;ldquo;this&amp;rdquo; instead less directly through &amp;ldquo;Me.Application&amp;rdquo; or &amp;ldquo;this.Application&amp;rdquo;.&amp;nbsp; Which type of template to use is a design decision.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=970" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSTA+v+2/default.aspx">VSTA v 2</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Visual+Basic+6.0/default.aspx">Visual Basic 6.0</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/COM/default.aspx">COM</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VB6/default.aspx">VB6</category></item><item><title>Proxy Assembly Registration- Unique Name Required</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/26/Proxy-Assembly-Registration_2D00_-Unique-Name-Required.aspx</link><pubDate>Mon, 26 Jan 2009 20:53:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1657</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1657</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/26/Proxy-Assembly-Registration_2D00_-Unique-Name-Required.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;VSTA v 2.0 add-ins use two mechanisms to associate add-ins with proxy assemblies.&amp;nbsp; These include the &lt;a href="http://msdn.microsoft.com/en-us/library/yf1d93sz.aspx" title="MSDN:  Global Assembly Cache"&gt;Global Assembly Cache (GAC)&lt;/a&gt; and the &lt;a href="http://msdn.microsoft.com/en-us/library/cc175292.aspx" title="MSDN:  Understanding the Add-in Pipeline in Visual Studio Tools for Applications"&gt;VSTA pipeline&lt;/a&gt;.&amp;nbsp; Each has separate considerations to take into account when naming your proxy assembly.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;strong&gt;The Global Assembly Cache (GAC) and Add-in Projects&lt;/strong&gt;&amp;nbsp; &lt;br /&gt;The proxy assembly should be registered in the GAC so that add-in projects can resolve the reference without requiring a local copy or absolute path.&amp;nbsp; It is possible to get around this by modifying the project templates to use a hint path, but ProjectGen will complain if the proxy assembly in not registered here.&amp;nbsp; Considerations, including naming schemes, for how add-in projects resolve the reference to the proxy assembly registered in the GAC have been covered in a previous blog, &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:  Proxy-Versioning Options for Project Templates"&gt;Proxy Versioning Options for Project Templates&lt;/a&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;The SDK samples register the proxy assembly in the GAC using a post build event and the file InstallInGAC.bat.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;strong&gt;The VSTA pipeline and Visual Basic Add-in Assemblies&lt;/strong&gt;&lt;br /&gt;When Visual Basic add-ins are loaded through the VSTA pipeline, the proxy assembly must be registered with the pipeline.&amp;nbsp; This means that the proxy assembly should be copied to %Common Program Files%\Microsoft Shared\VSTA\Pipeline\AddInViews (see the section on &amp;quot;Additional Requirments for Visual Basic Add-ins&amp;quot; in the MSDN documentation for &lt;a href="http://msdn.microsoft.com/en-us/library/cc176064.aspx" title="MSDN:  Creating Proxies"&gt;Creating Proxies&lt;/a&gt;).&amp;nbsp; &lt;em&gt;Unlike the GAC, proxies with non-unique names cannot co-exist here; therefore, proxy assemblies must use unique names or they will be overwritten&lt;/em&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;&lt;br /&gt;If the proxy assembly is not present here, then Visual Basic add-ins will not load.&amp;nbsp; Instead they will throw a file not found a FileNotFoundException when activate is called (see code and exception below).&amp;nbsp; In the case where the proxy assembly is overwritten, the results will vary depending on the compatibility of the proxy assemblies.&amp;nbsp; If the assemblies are completely incompatible then the addInToken.Count will be zero.&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;The SDK samples register the proxy with the VSTA pipeline by using a post build event and the file InstallForVB.bat which copies the proxy assembly to %Common Program Files%\Microsoft Shared\VSTA\Pipeline\AddInViews and runs AddInUtil &amp;ndash;PipelineRoot:&amp;rdquo;%Pipeline location%&amp;rdquo; -Rebuild&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Note this is not a consideration for C# add-ins.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;FileNotFoundException will occur here if the proxy is not in C:\Program Files\Common Files\Microsoft Shared\VSTA\Pipeline\AddInViews when attempting to load a VB add-in&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;IEntryPoint&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; addIn = addInToken[0].Activate&amp;lt;&lt;span style="color:#2b91af;"&gt;IEntryPoint&lt;/span&gt;&amp;gt; _&lt;br /&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;&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-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;AddInSecurityLevel&lt;/span&gt;.FullTrust);&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:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;br /&gt;Exception if proxy assembly is not in &amp;hellip;VSTA\Pipeline\AddInViews:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;System.IO.FileNotFoundException was caught&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Message=&amp;quot;Could not load file or assembly &amp;#39;file:///C:\\Program Files\\Common Files\\Microsoft Shared\\VSTA\\Pipeline\\AddInViews\\ShapeAppCSharpProxy.dll&amp;#39; or one of its dependencies. The system cannot find the file specified.&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at System.AddIn.Hosting.AddInToken.Activate[T](AddInSecurityLevel trustLevel)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at Microsoft.VisualStudio.Tools.Applications.Samples.ShapeApp.VstaRunTimeIntegration.LoadAddIn(String addInPath, String startUpClass) in C:\ShapeAppSamples\VSTA v 2 RTM\ShapeAppBasicCSharp\integration\basic\VstaRunTimeIntegration.cs:line 161&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;&lt;font size="3" face="arial,helvetica,sans-serif" style="font-size:small;"&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;br /&gt;&lt;br /&gt;addInToken.Count will be zero if the proxy was overwritten by an incompatible proxy:&lt;/p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Collection&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;AddInToken&lt;/span&gt;&amp;gt; addInToken = &lt;span style="color:#2b91af;"&gt;AddInStore&lt;/span&gt;.FindAddIn(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;IEntryPoint&lt;/span&gt;), &lt;span style="color:#2b91af;"&gt;AddInStoreExtensions&lt;/span&gt;.DefaultPipelinePath, addInPath, startUpClass);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Related blogs:&lt;br /&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:  Proxy Versioning Options"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Proxy Versioning Options for Project Templates&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/04/28/VSTA-v-2-Proxy-Names_2D00_-Unique-Names-for-Proxy-Versions.aspx" title="Summit Blog:  VSTA v 2 Proxy Names"&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;VSTA v 2 Proxy Names- Unique Names for Proxy Versions&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Creating Proxies- Installing the Proxy Assembly with the Host Application&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;
&lt;p&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;VSTA Pipeline location:&lt;br /&gt;C:\Program Files\Common Files\Microsoft Shared\VSTA\Pipeline&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;Proxy assemblies are stored in:&lt;br /&gt;C:\Program Files\Common Files\Microsoft Shared\VSTA\Pipeline\AddInViews&lt;/span&gt;&lt;/p&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;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&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://www.summsoft.com/aggbug.aspx?PostID=1657" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/add-in/default.aspx">add-in</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/pipeline/default.aspx">pipeline</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/AddInViews/default.aspx">AddInViews</category></item><item><title>Code Analysis Suppress Message Attributes in the ShapeAppCSharp Samples</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/26/Code-Analysis-Suppress-Message-Attributes-in-the-ShapeAppCSharp-Samples.aspx</link><pubDate>Mon, 26 Jan 2009 15:58:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1656</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1656</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/26/Code-Analysis-Suppress-Message-Attributes-in-the-ShapeAppCSharp-Samples.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;In the ShapeAppCSharp samples included with the VSTA v 2.0 SDK you may notice most types and methods are marked with a System.Diagnostics.CodeAnalysis.SuppressMessage attribute.&amp;nbsp; These attributes are not involved with the VSTA integration; they are used by the Team Foundation System&amp;rsquo;s (TFS) code analysis functionality and can be safely removed if not using TFS code analysis (&lt;a href="http://stackoverflow.com/questions/438803/explain-system-diagnostics-codeanalysis-suppressmessage" title="StackOverFlow.com forum"&gt;related forum post&lt;/a&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;For more information on these attributes, please refer to the MSDN documentation &lt;a href="http://msdn.microsoft.com/en-us/library/ms182068.aspx" title="MSDN:  Suppress Warnings Using SupressMessage Attribute"&gt;Suppress Warnings Using SuppressMessage Attribute&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms244717(VS.80).aspx" title="MSDN:  In Source Suppression Overview"&gt;In Source Suppression Overview&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;Excerpt from &lt;a href="http://msdn.microsoft.com/en-us/library/ms244717(VS.80).aspx" title="MSDN:  In Source Suppression Overview"&gt;In Source Suppression Overview&lt;/a&gt;:&lt;br /&gt;After reviewing the code, you might determine that the code is correct as is. Or, it might be the case that some violations are low priority and will not be fixed in the current development cycle. Regardless of the reason, it is frequently useful to indicate that the warning is non-applicable in order to let the team members know that the code was reviewed and it was determined that the warning be suppressed. In source suppression is useful because it allows a developer to put that suppresses warning close to the warning itself. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:arial,helvetica,sans-serif;"&gt;You can use the Error List window to suppress managed code analysis warnings. Suppressing a warning differs from disabling it. When you suppress a warning, it applies only to a particular instance of the violation. Other violations of the same warning will still be reported in the Error List window.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1656" width="1" height="1"&gt;</description></item><item><title>Adding a Hidden File to a Project Template</title><link>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/22/Adding-a-Hidden-File-to-a-Project-Template.aspx</link><pubDate>Thu, 22 Jan 2009 16:00:00 GMT</pubDate><guid isPermaLink="false">ff090588-e3d7-4538-8ee9-e75ea04444bb:1648</guid><dc:creator>Melody</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1648</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2009/01/22/Adding-a-Hidden-File-to-a-Project-Template.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;"&gt;
&lt;p&gt;In many situations you want to add background code to a project template without exposing it to the end user. An easy way to do this is to add a hidden code file to the template. Here are the 6 steps to do this which are the same for both C# and VB templates:&lt;/p&gt;
&lt;p&gt;1)&amp;nbsp; Unzip the existing project template.&lt;/p&gt;
&lt;p&gt;2)&amp;nbsp; Add the file to use as the hidden code file to the same folder as all other files in the template (do not put it in a sub folder).&lt;/p&gt;
&lt;p&gt;3)&amp;nbsp; Update the vstemplate file to include the hidden file.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; Use the same syntax as the main code file.&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;
&lt;p&gt;4)&amp;nbsp; Update the xxproj file to include the hidden file.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; Use similar syntax as the hidden xml designer file.&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="mso-spacerun:yes;"&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;5)&amp;nbsp; Save and re-zip the updated template, moving the new zip file to the ProjectTemplatesLocation.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;6)&amp;nbsp; Run vsta setup for the host.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&lt;a title="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.00.16.48/templates.zip" href="http://www.summsoft.com/controlpanel/blogs/posteditor.aspx/Summit:%20%20Attached%20Sample"&gt;Attached&lt;/a&gt; are sample templates updated with a hidden code file for the ShapeAppCSharp SDK samples.&amp;nbsp; To use these templates, place them in the ProjectTemplatesLocation, run setup, then create a new add-in project based off the templates.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;A &lt;a title="Summit Video:  Adding a Hidden File to a Project Template" href="http://www.summsoft.com/blogs/videos/archive/2009/01/23/adding-a-hidden-file-to-a-project-template.aspx"&gt;video&lt;/a&gt; covering this sample is also available.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;Project Explorer with hidden file (ShowAll turned on):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;img src="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.UserFiles/00.00.00.51.26/ProjectExplorer-ScreenShot.png" alt="" /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;Step 4- vstemplate update&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;TemplateContent&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;Project&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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 style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;File&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;ShapeAppCSharpAppAddInProject.vbproj&lt;/span&gt;&amp;quot;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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 style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;ReplaceParameters&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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-family:&amp;#39;Courier New&amp;#39;;color:#008000;"&gt;Main code file&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="font-size:small;"&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&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;ProjectItem&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;ReplaceParameters&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;TargetFileName&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn.vb&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;AppAddIn.vb&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ProjectItem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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-family:&amp;#39;Courier New&amp;#39;;color:#008000;"&gt;Add the hidden item&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="font-size:small;"&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&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;ProjectItem&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;ReplaceParameters&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;TargetFileName&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;HiddenFile.vb&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;HiddenFile.vb&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ProjectItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Step 5- xxproj file update&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;ItemGroup&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#008000;"&gt;Hidden designer file&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;None&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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 style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;Include&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;AppAddIn.designer.xml&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;DependentUpon&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;AppAddIn.vb&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DependentUpon&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#008000;"&gt;Add the hidden item under the AppAddIn.cs file&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;Compile&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&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 style="font-family:&amp;#39;Courier New&amp;#39;;color:#ff0000;"&gt;Include&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;HiddenFile.vb&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;DependentUpon&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;AppAddIn.vb&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DependentUpon&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;&amp;gt;&lt;br /&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="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;Compile&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="text-decoration:underline;"&gt;Examples&lt;/span&gt;&lt;br /&gt;&lt;/span&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-no-proof:yes;"&gt;&lt;span style="font-family:Calibri;"&gt;VB&lt;br /&gt;Hidden code file:&lt;br /&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;Partial&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; AppAddIn&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Default&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; Item(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; index &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Drawing&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;Get&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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;Return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Document.Drawings(index)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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;End&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;Get&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;Property&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;End&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-family:Calibri;"&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Add-in using code from hidden code file:&lt;br /&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;Private&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; AppAddIn_Startup(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Startup&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;(0).Shapes.Add(&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.AvailableShapes(1).Clone())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;End&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;C#&lt;br /&gt;Hidden code file&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; Microsoft.VisualStudio.Tools.Applications.Samples.ShapeApp;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; ShapeAppCSharpAppAddIn1&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&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;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AppAddIn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;font-family:&amp;#39;Courier New&amp;#39;;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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:#2b91af;"&gt;Drawing&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;[&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index]&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Document.Drawings[index]; }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&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 style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:small;font-family:Calibri;color:#000000;"&gt;Add-in using code from hidden code file:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&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;AppAddIn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; AppAddIn_Startup(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&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-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size: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;this&lt;/span&gt;[0].Shapes.Add(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.AvailableShapes[1].Clone());&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&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-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:small;font-family:Calibri;"&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Calibri;"&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://www.summsoft.com/aggbug.aspx?PostID=1648" width="1" height="1"&gt;</description><enclosure url="http://www.summsoft.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.00.16.48/templates.zip" length="22621" type="application/x-zip-compressed" /><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Project+Template/default.aspx">Project Template</category></item><item><title>UpgradeHelper Sample Now Available</title><link>http://www.summsoft.com/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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1538</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/12/04/UpgradeHelper-Sample-Now-Available.aspx#comments</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://www.summsoft.com/aggbug.aspx?PostID=1538" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/add-in/default.aspx">add-in</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSTA+1/default.aspx">VSTA 1</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSTA+2/default.aspx">VSTA 2</category><category domain="http://www.summsoft.com/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://www.summsoft.com/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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1472</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/11/18/New-Sample-Available--Two-Applications-Share-a-HostID-Sample.aspx#comments</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://www.summsoft.com/aggbug.aspx?PostID=1472" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/HostID/default.aspx">HostID</category></item><item><title>Application, HostID, Proxy, and EntryPoint Associations</title><link>http://www.summsoft.com/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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1469</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/11/17/Application_2C00_-HostID_2C00_-Proxy-and-EntryPoint-Associations.aspx#comments</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://www.summsoft.com/aggbug.aspx?PostID=1469" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/HostID/default.aspx">HostID</category><category domain="http://www.summsoft.com/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://www.summsoft.com/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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.summsoft.com/blogs/melodys_vsta_blog/rsscomments.aspx?PostID=1451</wfw:commentRss><comments>http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/11/13/Monitoring-and-Controlling-the-IDE_2D00_-Catching-the-File.Exit-and-other-events.aspx#comments</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://www.summsoft.com/aggbug.aspx?PostID=1451" width="1" height="1"&gt;</description><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx">vsta</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSTA.exe/default.aspx">VSTA.exe</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/File.Exit/default.aspx">File.Exit</category><category domain="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/IDE/default.aspx">IDE</category></item></channel></rss>