<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.summsoft.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Melody's VSTA Blog</title><subtitle type="html">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're here to help- just ask.</subtitle><id>http://www.summsoft.com/blogs/melodys_vsta_blog/atom.aspx</id><link rel="alternate" type="text/html" href="http://www.summsoft.com/blogs/melodys_vsta_blog/default.aspx" /><link rel="self" type="application/atom+xml" href="http://www.summsoft.com/blogs/melodys_vsta_blog/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30619.63">Community Server</generator><updated>2008-05-27T17:00:00Z</updated><entry><title>VSTA Documentation on MSDN</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/10/10/VSTA-Documentation-on-MSDN.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/10/10/VSTA-Documentation-on-MSDN.aspx</id><published>2008-10-10T14:53:00Z</published><updated>2008-10-10T14:53:00Z</updated><content type="html">&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;The MSDN site now includes &lt;a href="http://msdn.microsoft.com/en-us/library/cc175562.aspx"&gt;documentation for VSTA v 2.0&lt;/a&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The documentation available through the MSDN site is an updated version of the documentation included with the SDK.&amp;nbsp; Updates in the on-line documentation include sections on &lt;a href="http://msdn.microsoft.com/en-us/library/cc747850.aspx"&gt;how to properly expose structs&lt;/a&gt; and tips on debugging.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This site also provides a Community Content section where users can post helpful tips and workarounds.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc175562.aspx"&gt;Click here to go to VSTA 2.0 on MSDN&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1372" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="vsta" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx" /><category term="MSDN" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/MSDN/default.aspx" /><category term="help" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/help/default.aspx" /></entry><entry><title>Updated EventSample with EntryPoint Generic Event Handling</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/10/08/Updated-EventSample-with-EntryPoint-Generic-Event-Handling.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/10/08/Updated-EventSample-with-EntryPoint-Generic-Event-Handling.aspx</id><published>2008-10-08T19:52:00Z</published><updated>2008-10-08T19:52:00Z</updated><content type="html">&lt;p&gt;There is a new sample up demonstrating generic event handling in entry point classes.&amp;nbsp; Click here to download &lt;a href="http://www.summsoft.com/media/p/1368.aspx"&gt;EventSample VB v2.1 &amp;ndash; Exposing Generic Events in Entry Point Classes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Excerpt&amp;nbsp;from EventSample VB v2.1 EventHandlerT in EntryPoint Classes.doc:&lt;/p&gt;
&lt;p class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;At this time there is no direct way to expose an EventHandler&amp;lt;T&amp;gt; in the host to VSTA add-ins.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This sample uses a workaround which involves using non-generic event handling between the host and proxy, and generic event handling between the proxy and add-in.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This is accomplished by raising the non-generic events in the host and adding methods to the proxy to translate the events and event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The host and proxy must be modified; however, the host item provider and host type map provider do not require any alterations.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This workaround only works for generic events raised by the entry point class the add-in is based on.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;There is a separate workaround for generic events raised by other classes which is more involved.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This sample is a modified version of the Event Sample VB v 2.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;To run this sample, extract the zip file and run the included setup file SetupEventSample VB v 2.1.js.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Build the solution to move the proxy to the GAC and build the included sample add-in to load the assembly.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Both events hooked into the by the add-in will be triggered by entering a message into the input box and selecting &amp;ldquo;Add&amp;rdquo;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;The proxy and add-ins use tight versioning, the proxy assembly is marked as version 2.1 and the project templates included use this assembly as version specific.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;To use the included AutoProxyGen Input.xml file to regenerate the main proxy file, update the file locations (the proxy included will work so this is not necessary).&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Only one modification was done to the auto-generated proxy file, in the entry point class and it&amp;rsquo;s base the non-generic events were changed from public to private so that only the generic events are visible to add-ins.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Workaround Components:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li style="mso-list:l4 level1 lfo2;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Host&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;1)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define custom event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;2)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define an EventHandler&amp;lt;T&amp;gt; in the EntryPoint class using the custom event args (must be the entry point the add-in will be based on).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;3)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define a delegate using the custom event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will be used to communicate between the host and proxy.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;4)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Define an event based on the delegate defined in 3 above.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will be used to communicate between the host and proxy.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpLast"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;5)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Anytime the EventHandler&amp;lt;T&amp;gt; is raised, raise the event based on the delegate, this event will trigger the EventHandler&amp;lt;T&amp;gt; in the proxy/add-in.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 0pt 0.5in;" class="MsoListParagraph"&gt;&lt;span style="font-size:x-small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li style="mso-list:l4 level1 lfo2;" class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;Proxy&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;6)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Create the proxy as normal.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will define in the proxy:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l2 level2 lfo3;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;a.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The custom event args from 1.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l2 level2 lfo3;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;b.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The delegate using the custom event args from 3.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l2 level2 lfo3;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;c.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The event based on the delegate from 4 in both the class and the entry point class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;This will skip:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l3 level1 lfo4;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;a.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The EventHandler&amp;lt;T&amp;gt; (all generics are skipped).&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;ProxyGen.exe Warning: 21040 : The following event type MainApplication contains generic type information and will not be parsed: cEventHandlerT.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;7)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Re-implement the custom EventArgs in the proxy while keeping the auto-generated custom EventArgs.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Do this by using a different name for the re-implemented custom event args, or nesting them in a class.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;8)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Expand the partially defined entry point class in the proxy (suggest to do this is a separate code file) adding:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;a.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;A private event EventHandler&amp;lt;T&amp;gt; for the custom event args for internal use by the proxy.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Do not define the add and remove methods for this event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;b.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;A flag for the private event defined above initialized to false.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;c.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;The EventHandler&amp;lt;T&amp;gt; defined in the host skipped by ProxyGen using the re-implemented event args deined in 7 above.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Define the add and remove methods for this event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In the Add method, hook the value passed in to the private event defined in 8a above.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Then, if the flag defined in 8b is false, hook the auto-generated generic event handler defined in the main proxy file to a new method to be defined in the expanded entry point class (defined below) and set the flag to true.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In the remove method, remove the value from the private event defined in 8a above.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;text-indent:-0.25in;mso-list:l0 level1 lfo5;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;d.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Add a method which satisfies the signature for the generic event handling, using the original event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In this method, translate the original event args to the re-implemented event args.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Use the re-implemented event args to raise the private event defined in 3a.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 1.25in;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:auto auto auto 0.75in;text-indent:-0.25in;mso-list:l1 level1 lfo1;mso-add-space:auto;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="mso-bidi-font-family:Calibri;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;9)&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;Expand the partially defined class in the proxy adding the EventHandler&amp;lt;T&amp;gt; (suggest to do this in the same separate code file).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1369" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="vsta" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx" /><category term="event handling" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/event+handling/default.aspx" /><category term="EventHandling" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/EventHandling/default.aspx" /><category term="Generics" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Generics/default.aspx" /><category term="EventHandler&amp;lt;T&amp;gt;" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/EventHandler_2600_lt_3B00_T_2600_gt_3B00_/default.aspx" /></entry><entry><title>Tools to Automate VSTA 2 Integrations:  AutoProxyGen and Templates</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/10/01/Tools-to-Automate-VSTA-2-Integrations-AutoProxyGen-and-Templates.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/10/01/Tools-to-Automate-VSTA-2-Integrations-AutoProxyGen-and-Templates.aspx</id><published>2008-10-01T19:48:00Z</published><updated>2008-10-01T19:48:00Z</updated><content type="html">&lt;div&gt;&lt;span style="font-size:small;font-family:Times New Roman;"&gt;
&lt;p&gt;We have new downloads up including templates and a new tool AutoProxyGen which automates ProxyGen and can be used in build events.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.summsoft.com/media/p/1355.aspx"&gt;AutoProxyGen&lt;/a&gt;:&lt;br /&gt;This tool automates the process of using ProxyGen and can be used as a build event.&amp;nbsp; AutoProxyGen includes workarounds for ProxyGen bugs including automatically excluding structs and ensuring that items which are not marked as excluded are not excluded.&amp;nbsp; AutoProxyGen includes a basic VSTA integration which can be used for further customizations, such as examining the host for custom attributes to specify entry points and excluded items and correcting the inheritance error which prevents COM hosts from exposing events.&lt;/p&gt;
&lt;p&gt;A sample add-in demonstrating how to correct the inheritance error for COM hosts is included, other add-ins are available upon request.&lt;/p&gt;
&lt;p&gt;Video:&amp;nbsp; &lt;a href="http://www.summsoft.com/blogs/videos/archive/2008/10/01/AutoProxyGen_3A00_--From-ProxyGen-to-AutoProxyGen.aspx"&gt;From ProxyGen to AutoProxyGen&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.summsoft.com/media/p/1356.aspx"&gt;Templates&lt;/a&gt;:&lt;br /&gt;Templates to help automate VSTA v 2.0 integrations are now available.&amp;nbsp; Run the included setup file to move the templates to the Visual Studio 2008 template caches (may need to restart Visual Studio for templates to work).&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proxy Project- includes all files and post build event necessary to place the proxy assembly in the GAC and rebuild the VSTA pipeline.&amp;nbsp; C# only.&amp;nbsp; (may want to create a new or use existing key.snk file)&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Host Item Provider- Use Find&amp;amp;Replace to replace &amp;quot;YourEntryPointType&amp;quot; with the type of the host entry point.&amp;nbsp; Includes necessary references. Item template.&amp;nbsp; VB &amp;amp; C#&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;VstaRunTimeIntegration- Update the variables in the &amp;quot;Variables to update&amp;quot; section including the host entry point type, start-up class for add-ins, and the folder in %MyDocuments% to find add-ins in.&amp;nbsp; Includes necessary references. Item Template.&amp;nbsp; VB &amp;amp; C#&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1361" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="vsta" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx" /><category term="addin" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/addin/default.aspx" /><category term="ProxyGen" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/ProxyGen/default.aspx" /><category term="AutoProxyGen" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/AutoProxyGen/default.aspx" /></entry><entry><title>New EventSample for VSTA v 2 (VB.Net)</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/09/02/New-EventSample-for-VSTA-v-2.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/09/02/New-EventSample-for-VSTA-v-2.aspx</id><published>2008-09-02T17:43:00Z</published><updated>2008-09-02T17:43:00Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.summsoft.com/media/p/1258.aspx"&gt;Click here to download EventSample VB v 2.0 for VSTA&amp;nbsp; v 2&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Overview:&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;This sample is intended to expose several common tasks in VSTA, including: declaring an object, using and manipulating a form, and handling form events and event args.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This sample contains a very simple object, form, application with a basic VSTA integration, and an add-in.&lt;span&gt;&amp;nbsp; &lt;/span&gt;An EventHelper is used to prevent any errors in add-in event handling.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;To run the sample, extract the files, open and build the EventSample solution, then run the setup file included (double click or use the command &amp;ldquo;cscript SetupEventSample.js&amp;rdquo; from a command prompt).&lt;span&gt;&amp;nbsp; &lt;/span&gt;Next, open and build the add-in solution included in the Samples folder.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Run the EventSample application, which should now automatically find and load the sample add-in included.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The EventSample application records button clicks and input from a text box in a list box.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The sample add-in responds to mouse clicks on any of the buttons on the form, to adding input through the add button, clearing the display, and selecting the Open button.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Event handling for the Save and Close buttons in the add-in is not implemented.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Included in this sample:&lt;/p&gt;
&lt;p&gt;
&lt;table cellpadding="0" cellspacing="0" style="border-collapse:collapse;" class="MsoNormalTable"&gt;

&lt;tr style="height:0.2in;"&gt;
&lt;td style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0in;width:106.3pt;padding-top:0in;height:0.2in;border:black 1pt solid;"&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b&gt;Item&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:black 1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;MainForm&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Main user form and empty code class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Program&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Starting point in the host application.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;MainApplication&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Main application class.&lt;span&gt;&amp;nbsp; &lt;/span&gt;All application specific code is here.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;MainObject&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Main object used by the MainApplication class.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Consists of a string.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;EventArgs&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Contains class definitions for custom event used by the MainApplication.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;EventHelper&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Class taken from ShapeApp samples to manage events from the host application and add-ins.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;VstaRunTimeIntegration&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Class based on the ShapeApp samples which uses the VSTA pipeline to load and manage add-ins.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;HostItemProvider&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Class based on the ShapeApp samples which allows add-ins to access the host object model.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;HostTypeMapProvider&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;HTMP file generated by ProxyGen and translated into Visual Basic.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Maps the types to canocial names for translation between the host and add-ins.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;EventSampleProxy&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;Proxy file generated by ProxyGen and updated to allow generic event handling.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:0.2in;"&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:1pt solid;width:106.3pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;EventSampleProject1&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-right:1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0in;border-left:medium none;width:372.5pt;padding-top:0in;border-bottom:1pt solid;height:0.2in;"&gt;
&lt;p class="MsoNormal"&gt;A sample add-in that interacts with the events of the host application.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1259" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author></entry><entry><title>How to Update a Host’s Folder in %My Documents% </title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/08/25/How-to-Update-a-Host_1920_s-Folder-in-_2500_My-Documents_2500_-.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/08/25/How-to-Update-a-Host_1920_s-Folder-in-_2500_My-Documents_2500_-.aspx</id><published>2008-08-25T16:33:00Z</published><updated>2008-08-25T16:33:00Z</updated><content type="html">&lt;font face="Arial" size="2"&gt;VSTA hosts use a host specific folder
under %My Documents% (or %Documents for Vista) for various purposes.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is where the settings file is stored and
is the default save location is for new VSTA projects for the host (unless a
different location is specified under the registry entry NewProjectLocation).&lt;span&gt; &lt;br&gt;&lt;br&gt; &lt;/span&gt;

Most configuration settings can be
updated by deleting the host context hive under the &lt;b&gt;local machine&lt;/b&gt; hive (see Note 1 registry location), then running
vsta setup for the host.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Unlike other
registry settings, to update which folder is used in %My Documents% the host
context hive under the &lt;b&gt;local user&lt;/b&gt;
hive (see Note 2 for registry location) must be deleted prior to running vsta setup
for the host, and will be populated the next time VSTA is run for the host.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This context hive must be deleted if
specifying the folder under %My Documents% with either the AppName or UserFilesFolderName
registry entries.&lt;br&gt;&lt;br&gt;

The folder under %My Documents% which
will be used is determined by the UserFilesFolderName, which specifies which
folder under %My Documents% will be used (see Note 3 for examples).&lt;span&gt;&amp;nbsp; &lt;/span&gt;If no UserFilesFolderName is specified the
AppName is used, which specifies the title to appear in the VSTA IDE title bar.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If no AppName is specified, the hostId is
used.&lt;span&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;/span&gt;

This host specific folder under %My
Documents% will also be the default save location for new projects unless a different
location is specified with the NewProjectLocation entry, which specifies the
absolute location of the folder which will be used&lt;span&gt;&amp;nbsp; &lt;/span&gt;(not under %My Documents%, see Note 4 for
examples).&lt;br&gt;&lt;br&gt;

Note 1-&lt;span&gt;&amp;nbsp;
&lt;/span&gt;The context registry hive under the local machine registry hive is
located at: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSTAHost\&amp;lt;HostId&amp;gt;\9.0&lt;br&gt;&lt;br&gt;Note 2- The context registry hive under
the local user registry hive is located at:&lt;span&gt;&amp;nbsp;
&lt;/span&gt;HKEY_CURRENT_USER\Software\Microsoft\VSTAHost\&amp;lt;HostId&amp;gt;\9.0&lt;br&gt;&lt;br&gt;Note 3- The UserFilesFolderName entry specifies
which folder under %My Documents% the host will use, not an absolute path.&lt;br&gt;&lt;span&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; &lt;/span&gt;Example
good:&lt;span&gt;&amp;nbsp; &lt;/span&gt;“ShapeAppDocuments”&lt;br&gt;&lt;span&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; &lt;/span&gt;Example
bad:&lt;span&gt;&amp;nbsp; &lt;/span&gt;“C:\ShapeAppDocuments”&lt;br&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br&gt;

Note 4- the NewProjectLocation entry specifies
an absolute folder which will be the default save location for new VSTA
projects for the host.&lt;br&gt;&lt;span&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; &lt;/span&gt;Example
good:&lt;span&gt;&amp;nbsp; &lt;/span&gt;“C:\ShapeAppDocuments”&lt;br&gt;&lt;span&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; &lt;/span&gt;Example
bad:&lt;span&gt;&amp;nbsp; &lt;/span&gt;“ShapeAppDocuments”&lt;br&gt;&lt;br&gt;For more information on host registry settings,
please refer to MSDN which now features VSTA v 2.0.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc176071.aspx"&gt;Click here to go
to the Registering a Host Application section&lt;/a&gt;.&lt;br&gt;&lt;br&gt;

This applies to VSTA 2005 (v1) and 2008
(v2), the registry hives used above are for VSTA v 2.&lt;br&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1237" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author></entry><entry><title>Proxy Versioning Options for Project Templates</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/08/15/Proxy-Versioning-Options-for-Project-Templates.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/08/15/Proxy-Versioning-Options-for-Project-Templates.aspx</id><published>2008-08-15T16:35:00Z</published><updated>2008-08-15T16:35:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;A common question is how to use versioning for the proxy assembly in add-ins.&amp;nbsp; There are basically three different options.&amp;nbsp; &lt;a href="http://www.summsoft.com/files/folders/vsta_samples/entry1236.aspx"&gt;(Download Sample)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp; No Versioning:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;Only the name of the assembly is used in the project template and the first assembly in the GAC matching this name will be used.&amp;nbsp; This is how ProjectGen references the proxy in the project template file.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;Pros:&amp;nbsp; Will load any proxy present.&lt;br /&gt;Cons:&amp;nbsp; No control over which version of the proxy is loaded.&amp;nbsp; When the intended version is present, but not first in the GAC, it will not load and the project may not build.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;&lt;br /&gt;2)&amp;nbsp;&amp;nbsp;&amp;nbsp; Tight Versioning:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;The name and version of the proxy assembly is used in the project template with the option specific version set to true.&lt;br /&gt;&lt;br /&gt;Pros:&amp;nbsp; Correct version will always load if present.&amp;nbsp; &lt;br /&gt;Cons:&amp;nbsp; If correct version is not present, but a compatible version is, the project will not load the compatible version and build.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;&lt;br /&gt;3)&amp;nbsp;&amp;nbsp;&amp;nbsp; Loose Versioning:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;A name and version of the proxy assembly is used in the project template with the option specific version set to false or not set.&lt;br /&gt;&lt;br /&gt;Pros:&amp;nbsp; Correct version will load if present.&amp;nbsp; If correct version is not present the first assembly with a matching name in the GAC will load.&lt;br /&gt;Cons:&amp;nbsp; No control over which version is loaded if the correct version is not present.&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;Here&amp;rsquo;s some examples which illustrate the differences in versioning.&lt;br /&gt;&lt;br /&gt;Assumption- three proxies are in the GAC corresponding to three different versions of the same host:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;ShapeAppCSharp Version 1.0.0.0 from VSTA v 1 SDK sample.&amp;nbsp; Using Host v 1.0.0.0.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;ShapeAppCSharp Version 2.0.0.0 from VSTA v 2 SDK sample with version of proxy assembly changed to 2.0.0.0.&amp;nbsp; Using Host v 2.0.0.0.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;ShapeAppCSharp Version 2.1.0.0 from VSTA v 2 SDK sample with a method added to the Application class (Application.DrawingHasShapes) and the version of the proxy assembly changed to 2.1.0.0.&amp;nbsp; Using Host v 2.1.0.0.&amp;nbsp; The proxy v 2.1.0.0 is compatible v 2.0.0.0 projects.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;&lt;br /&gt;&lt;b&gt;Test 1:&lt;/b&gt;&amp;nbsp; Open a VSTA v 2 project for Host v 2.1.0.0 using the method added (Application.DrawingHasShapes) with the above assemblies in the GAC.&lt;br /&gt;&lt;br /&gt;No Versioning-&amp;nbsp; Fail. Project will load the ShapeAppCSharp Version 1.0.0.0 project and not build because this assembly is for the v 1.0.0.0 host which uses VSTA v 1.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Tight Versioning-&amp;nbsp; Pass.&amp;nbsp; Project will load the correct proxy.&lt;br /&gt;&lt;br /&gt;Loose Versioning-&amp;nbsp; Pass.&amp;nbsp; Project will load the correct proxy.&amp;nbsp; *Note: if the host which loads this add-in is v 2.0.0.0 the add-in will fail during execution because the method added to v 2.1.0.0 is not present in the host.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test 2:&amp;nbsp;&lt;/b&gt; Open a VSTA v 2 project for Host v 2.0.0.0 with only the v 2.1.0.0 assemblies in the GAC.&lt;br /&gt;&lt;br /&gt;No Versioning-&amp;nbsp; Pass. Only proxy present will load and the project will build because the v 2.1.0.0 proxy is compatible with v 2.0.0.0 projects.&amp;nbsp; *Note: if the v1 proxy was still in the GAC this may fail.&lt;br /&gt;&lt;br /&gt;Tight Versioning-&amp;nbsp; Fail.&amp;nbsp; The specific version of the proxy is not present, so no proxy assembly will be loaded.&amp;nbsp; *Note by setting the Specific Reference attribute to false in the properties window (in the Project Explorer) the project will change to Loose Versioning and pass.&lt;br /&gt;&lt;br /&gt;Loose Versioning-&amp;nbsp; Pass.&amp;nbsp; The compatible v 2.0.0.0 will load.&amp;nbsp; *Note: if the v1 proxy was still in the GAC this may fail.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;We offer a sample which shows how to implement Tight Versioning- &lt;a href="http://www.summsoft.com/files/folders/vsta_samples/entry1236.aspx"&gt;click here&lt;/a&gt;.&lt;br /&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=1235" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="vsta" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx" /><category term="Proxy" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Proxy/default.aspx" /><category term="Project Template" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Project+Template/default.aspx" /><category term="Versioning" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Versioning/default.aspx" /></entry><entry><title>Updating Project References Programmatically</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/08/13/Updating-Project-References-Programmatically.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/08/13/Updating-Project-References-Programmatically.aspx</id><published>2008-08-13T19:10:00Z</published><updated>2008-08-13T19:10:00Z</updated><content type="html">&lt;p class="MsoNormalCxSpFirst" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;A host, or helper application, can programmatically
update a reference in a project.&lt;span&gt;&amp;nbsp; &lt;/span&gt;One
instance where this is useful is when you want to ensure that a specific
version of a proxy reference is used.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Below is an updated version of the
OpenMacroProject from the ShapeAppMacroRecordingCSharp sample which updates the
reference in the project to use second version of the ShapeAppCSharpProxy.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The proj file is updated prior to loading to
avoid any messages indicating that the project file has been updated and needs
to be reloaded.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;private&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OpenMacroProject()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// See if the
project is already loaded.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;
(EnvDTE.&lt;span style="color:#2b91af;"&gt;Project&lt;/span&gt; currProject &lt;span style="color:blue;"&gt;in&lt;/span&gt; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.dte.Solution.Projects)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;
projPath = currProject.FileName;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Compare(projPath,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;VstaDesignTimeIntegration&lt;/span&gt;.MacroProjectFilePath,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase) == 0)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:blue;"&gt;this&lt;/span&gt;.macroProject
= currProject;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:green;"&gt;// Set
the post build-event to install the Macro AddIn assembly into the &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:green;"&gt;// user&amp;#39;s
Documents folder i.e. &amp;quot;...\Documents\ShapeAppCSharp\MacroAddIns&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:blue;"&gt;this&lt;/span&gt;.macroProject.Properties.Item(&lt;span style="color:#a31515;"&gt;&amp;quot;PostBuildEvent&amp;quot;&lt;/span&gt;).Value = &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;cscript
\&amp;quot;$(ProjectDir)InstallAddIn.js\&amp;quot; \&amp;quot;$(TargetPath)\&amp;quot;
\&amp;quot;ShapeAppCSharp\\MacroAddIns\&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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;RegisterAsDebugHost();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:blue;"&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//SUMMIT- update
the reference &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//namespace
for the project file&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XNamespace&lt;/span&gt;
ns = &lt;span style="color:#a31515;"&gt;&amp;quot;http://schemas.microsoft.com/developer/msbuild/2003&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//load the
proj file&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XDocument&lt;/span&gt;
projDoc = &lt;span style="color:#2b91af;"&gt;XDocument&lt;/span&gt;.Load(&lt;span style="color:#2b91af;"&gt;VstaDesignTimeIntegration&lt;/span&gt;.MacroProjectFilePath);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//get the
node with the reference to update&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt;
oldRef = (&lt;span style="color:blue;"&gt;from&lt;/span&gt; refs &lt;span style="color:blue;"&gt;in&lt;/span&gt;
projDoc.DescendantNodes()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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 style="color:blue;"&gt;where&lt;/span&gt;
refs.ToString().StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;Reference&amp;quot;&lt;/span&gt;)
&amp;amp;&amp;amp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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;refs.ToString().Contains(&lt;span style="color:#a31515;"&gt;&amp;quot;ShapeAppCSharpProxy&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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 style="color:blue;"&gt;select&lt;/span&gt;
refs).First();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//create the
new version specific reference&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt;
updRef = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt;(ns
+ &lt;span style="color:#a31515;"&gt;&amp;quot;Reference&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;XAttribute&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Include&amp;quot;&lt;/span&gt;,
&lt;span style="color:#a31515;"&gt;&amp;quot;ShapeAppCSharpProxy, Version=2.0.0.0&amp;quot;&lt;/span&gt;),
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&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:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt;(ns + &lt;span style="color:#a31515;"&gt;&amp;quot;SpecificVersion&amp;quot;&lt;/span&gt;,
&lt;span style="color:#a31515;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//update the
node&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;oldRef code.ReplaceWith(updRef);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//save the
document&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;projDoc.Save(&lt;span style="color:#2b91af;"&gt;VstaDesignTimeIntegration&lt;/span&gt;.MacroProjectFilePath);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Load the
project as it is not currently loaded&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.macroProject
= &lt;span style="color:blue;"&gt;this&lt;/span&gt;.dte.Solution.AddFromFile(&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;VstaDesignTimeIntegration&lt;/span&gt;.MacroProjectFilePath,
&lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RegisterAsDebugHost();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
To use this code to correct the side by side evaluation issue (both versions
of the ShapeAppCSharp samples use the ShapeAppCSharpProxy) be sure to version
the proxy assembly and add the above code.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.summsoft.com/aggbug.aspx?PostID=1232" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="vsta" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/vsta/default.aspx" /><category term="Proxy" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Proxy/default.aspx" /><category term="Reference" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Reference/default.aspx" /></entry><entry><title>Bit Lock During Out of Process Debugging Workaround</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/08/04/Bit-Lock-During-Out-of-Process-Debugging-Workaround.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/08/04/Bit-Lock-During-Out-of-Process-Debugging-Workaround.aspx</id><published>2008-08-04T14:13:00Z</published><updated>2008-08-04T14:13:00Z</updated><content type="html">
&lt;p class="MsoNormal"&gt;During out of process debugging occasionally the pdb file
becomes locked and prevents builds from finishing successfully.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The &lt;span&gt;VstaDesignTimeIntegration&lt;/span&gt;.&lt;span&gt;DeleteMacroPdb&lt;/span&gt; method,
called in OnBuildBegin, is suppose to ensure that this does not happen by cycling
until the bits are no longer locked, then deleting them.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Unfortunately this does not always work and
the project can get stuck in an unbuildable state.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://nayyeri.net/blog/file-lock-issue-in-visual-studio-when-building-a-project/"&gt;Keyvan
Nayyeri posted a workaround&lt;/a&gt; to a similar issue in add-in programming (the
dll file becoming locked) which can be applied to this.&lt;span&gt;&amp;nbsp; &lt;/span&gt;He suggests using a pre-build event to move/rename
the locked files thus clearing the way for the updated bits to be built.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;a href="http://nayyeri.net/blog/file-lock-issue-in-visual-studio-when-building-a-project/"&gt;Keyvan’s
workaround&lt;/a&gt;:&lt;br&gt;
You can add following lines of code to the pre-build event command line of your
project. &lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;if exist
"$(TargetPath).locked" del "$(TargetPath).locked"&lt;/span&gt;&lt;br&gt;
&lt;span&gt;if exist "$(TargetPath)" if
not exist "$(TargetPath).locked" move "$(TargetPath)"
"$(TargetPath).locked"&lt;/span&gt; &lt;/p&gt;

&lt;p class="MsoListParagraphCxSpFirst" style="margin-left:0in;"&gt;Ways
to apply workaround:&lt;br&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Use
the above pre-build event modified to move the pdb file instead of the dll.*&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Use
a modified version of the InstallAddIn.js file used in the post build event in
the pre-build event to move the pdb bits.*&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In
the DeletePdb method move the locked file in the catch block (see
code below).&lt;/li&gt;&lt;/ol&gt;





&lt;p class="MsoNormal"&gt;* Keep in mind that like the post build event, the pre build
event can be added programmatically.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;By using this workaround, the build will no longer fail if
the pdb bits become locked.&lt;span&gt;&amp;nbsp; &lt;/span&gt;However, if
the bits do become locked, debugging will fail.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Related blog:&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/2008/01/18/shapeappmacrorecordingcsharp-common-problems-and-workarounds.aspx"&gt;ShapeAppMacroRecordingCSharp-
common problems and workarounds&lt;/a&gt;&lt;a href="http://tempuri.org/tempuri.html"&gt; &lt;/a&gt;&lt;br&gt;
One issue with the DeletePdb bit method is that it catches only the
IOException, not the UnauthorizedAccessException which is also thrown. &lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Code for #3 In the DeletePdb method move the locked file in
the catch instead of cycling&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;private&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; DeleteMacroPdb()&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt;
projectPath = &lt;span&gt;Path&lt;/span&gt;.GetDirectoryName(&lt;span&gt;VstaDesignTimeIntegration&lt;/span&gt;.MacroProjectFilePath);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[]
pdbFiles = &lt;span&gt;Directory&lt;/span&gt;.GetFiles(projectPath, &lt;span&gt;"*.pdb"&lt;/span&gt;, &lt;span&gt;SearchOption&lt;/span&gt;.AllDirectories);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//
Delete all PDB files for the project under \obj\.. and \bin\.. folders.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//
If a file is locked, retry to delete that file after 100 milliseconds.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt;
(&lt;span style="color:blue;"&gt;string&lt;/span&gt; pdbFile &lt;span style="color:blue;"&gt;in&lt;/span&gt;
pdbFiles)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; done = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;int&lt;/span&gt; retry = 0;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Retry a maximum of 5 seconds to delete the file.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;while&lt;/span&gt; (!done &amp;amp;&amp;amp; retry &amp;lt;= 50)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;File&lt;/span&gt;.Delete(pdbFile);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;
done = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span&gt;IOException&lt;/span&gt;
ex)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;File&lt;/span&gt;.Delete(pdbFile+&lt;span&gt;"old"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;File&lt;/span&gt;.Move(pdbFile, pdbFile + &lt;span&gt;"old"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;Thread&lt;/span&gt;.Sleep(100);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;
retry++;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span&gt;Exception&lt;/span&gt;
ex)&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;File&lt;/span&gt;.Delete(pdbFile + &lt;span&gt;"old"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;File&lt;/span&gt;.Move(pdbFile, pdbFile + &lt;span&gt;"old"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;Thread&lt;/span&gt;.Sleep(100);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;
retry++;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpMiddle" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&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=1212" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="VSTA v 2" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSTA+v+2/default.aspx" /><category term="ShapeApp" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/ShapeApp/default.aspx" /><category term="PDB" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/PDB/default.aspx" /><category term="MacroRecording" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/MacroRecording/default.aspx" /><category term="DeletePdb" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/DeletePdb/default.aspx" /><category term="file lock" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/file+lock/default.aspx" /></entry><entry><title>Using VSTA to Create Office Documents Through XML</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/06/17/using-vsta-to-create-office-documents-through-xml.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/06/17/using-vsta-to-create-office-documents-through-xml.aspx</id><published>2008-06-17T17:06:00Z</published><updated>2008-06-17T17:06:00Z</updated><content type="html">


&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With the introduction of LINQ to XML and the OpenXml
formatting of Office 2007 documents it is incredibly easy to use VSTA to import
and export data from a host application to an Office document and vice
versa.&amp;nbsp; One benefit of using OpenXml (or for Excel straight xml as well)
is that this can be performed without installing Office or using the office
API's, which allows this processing to be done on servers as well as desktops.&lt;br&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;A new sample is available showing how to export ShapeApp
shape data into Word and Excel using VSTA v 2 and taking advantage of the easy
to use LINQ to XML with Visual Basic.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;To &lt;a href="http://www.summsoft.com/files/folders/1152/download.aspx"&gt;download the sample add-ins, click here&lt;/a&gt;.&amp;nbsp; To go to the &lt;a href="http://www.summsoft.com/files/folders/vsta_samples/entry1152.aspx"&gt;download page, click here&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;





&lt;hr&gt;From the Xml Office AddIn Instructions:&lt;br&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Office 2007 introduced a new storage method for Office
document.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The new documents are actually
packages- they are zip files of xml documents.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;To explore one of these packages, change the extension to .zip and
explore it like any other zip file, or download &lt;a href="http://www.codeplex.com/PackageExplorer/Release/ProjectReleases.aspx?ReleaseId=4373"&gt;the
package explorer tool from CodePlex&lt;/a&gt; to explore and edit the package without
unzipping or using Office.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This new
document packaging format makes it very easy to import or export data between a
host and an Office document.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Two add-ins for ShapeAppCSharp (VSTA v 2) are available
demonstrating how to save ShapeApp data into a Word or Excel document.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The SaveToWord add-in uses the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en"&gt;Open
Xml Format SDK&lt;/a&gt; to add data to the main document (document.xml) of the Word package
(System.IO.Packaging could be used instead with minor modifications).&lt;span&gt;&amp;nbsp; &lt;/span&gt;The SaveToExcel add-in uses straight Xml
instead of OpenXml to get data into Excel because it is far easier to work with
straight Xml in Excel.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Excel can save
and open Xml documents without worrying about packaging.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Visual Basic was used to write both add-ins
because Visual Basic works better than C# with LINQ to XML.&lt;/p&gt;



&lt;hr&gt;From the ShapeAppCSharp_SaveToWord add-in:&lt;p class="MsoNormal"&gt;

&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;'This method populates the word document with ShapeAppData&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;Public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; SetMainDocumentContent(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt;
part &lt;span style="color:blue;"&gt;As&lt;/span&gt; MainDocumentPart)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Const&lt;/span&gt; name &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt; = &lt;span&gt;"Name:&lt;span&gt;&amp;nbsp; &lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Const&lt;/span&gt; size &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt; = &lt;span&gt;"Size:&lt;span&gt;&amp;nbsp; &lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Const&lt;/span&gt; loc &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt; = &lt;span&gt;"Location:&lt;span&gt;&amp;nbsp;
&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Const&lt;/span&gt; color
&lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt; = &lt;span&gt;"Color:&lt;span&gt;&amp;nbsp;
&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;'query the shapes
in the first drawing using LINQ to XML&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt;
docBodyData = &lt;span style="color:blue;"&gt;From&lt;/span&gt; shape &lt;span style="color:blue;"&gt;In&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.Document.Drawings(0).Shapes
_&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Select&lt;/span&gt;
_&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%=&lt;/span&gt; name
&amp;amp; shape.Name &lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:tab&lt;/span&gt;&lt;span&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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 style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%=&lt;/span&gt; size &amp;amp;
shape.Size.Height.ToString() &amp;amp; &lt;span&gt;", "&lt;/span&gt;
&amp;amp; shape.Size.Width.ToString() &lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:tab&lt;/span&gt;&lt;span&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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 style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%=&lt;/span&gt; loc &amp;amp;
shape.Location.X.ToString() &amp;amp; &lt;span&gt;", "&lt;/span&gt;
&amp;amp; shape.Location.Y.ToString() &lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:tab&lt;/span&gt;&lt;span&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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 style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%=&lt;/span&gt; color &amp;amp;
shape.Color.A.ToString() &amp;amp; &lt;span&gt;", "&lt;/span&gt;
&amp;amp; shape.Color.R.ToString() &amp;amp; &lt;span&gt;", "&lt;/span&gt;
&amp;amp; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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; &lt;/span&gt;shape.Color.B.ToString()
&amp;amp; &lt;span&gt;", "&lt;/span&gt; &amp;amp;
shape.Color.G.ToString() &lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:t&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:r&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;'to get the xml
stuff from word- create a new doc, add dummy data as a place holder &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;' in the format
you want to export it, then copy the xml from the document.xml part &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;' of the
package.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Remove the dummy data and
insert the LINQ query.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; docXml
= &lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;
&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;1.0&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; &lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;UTF-8&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; &lt;span&gt;standalone&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;&lt;/span&gt;&lt;span&gt;w:document&lt;/span&gt; &lt;span&gt;xmlns:w&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;http://schemas.openxmlformats.org/wordprocessingml/2006/main&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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; &lt;/span&gt;&lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%=&lt;/span&gt; docBodyData &lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&amp;lt;/&lt;/span&gt;&lt;span&gt;w:document&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;'save the xml to
the main document part of the word package&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; stream &lt;span style="color:blue;"&gt;As&lt;/span&gt; StreamWriter = &lt;span style="color:blue;"&gt;New&lt;/span&gt;
StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;docXml.Save(stream)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;End&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;Resources:&lt;br&gt;

&lt;p class="MsoNormal" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en"&gt;
&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en"&gt;Open
Xml Format SDK&lt;/a&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The &lt;a href="http://www.codeplex.com/PackageExplorer"&gt;PackageExplorer
tool from CodePlex&lt;/a&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Click on the
V3.0.0 RC1 link to start the download.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The MSDN article &lt;a href="http://msdn.microsoft.com/en-us/library/bb497758.aspx"&gt;"How to:
Create an Office Open XML Package by Using the Open XML API"&lt;/a&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:0.75in;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The MSN video &lt;a href="http://video.msn.com/video.aspx?vid=67c56f3c-a6a9-4b19-878d-f64b8296bfbd"&gt;“How
Do I Create Excel Spreadsheets using LINQ to XML?”&lt;/a&gt;&lt;/p&gt;

&lt;br&gt;&lt;p class="MsoNormal"&gt;&lt;br&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;&lt;o:p&gt;&lt;/o:p&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=1151" width="1" height="1"&gt;</content><author><name>Melody</name><uri>http://www.summsoft.com/members/Melody/default.aspx</uri></author><category term="add-in" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/add-in/default.aspx" /><category term="VSTA v 2" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/VSTA+v+2/default.aspx" /><category term="Office" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/Office/default.aspx" /><category term="XML" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/XML/default.aspx" /><category term="OpenXml" scheme="http://www.summsoft.com/blogs/melodys_vsta_blog/archive/tags/OpenXml/default.aspx" /></entry><entry><title>Determining the Build Path of a Project</title><link rel="alternate" type="text/html" href="/blogs/melodys_vsta_blog/archive/2008/06/13/determining-the-build-path-of-a-project.aspx" /><id>/blogs/melodys_vsta_blog/archive/2008/06/13/determining-the-build-path-of-a-project.aspx</id><published>2008-06-13T19:04:00Z</published><updated>2008-06-13T19:04:00Z</updated><content type="html">

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In seamless non-destructive debugging scenarios (macro
recording and running) the host application must keep track of the latest
version of the “macro” project assembly.&amp;nbsp; The IDE offers the user many opportunities
to change settings like the active configuration or the output path which can
make it difficult for the host to find the latest version of the assembly.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; To make it more complicated, when the advanced build
configurations are not shown the build path is dependent on the context of the
build (this mirrors Visual Studio).&lt;span&gt;&amp;nbsp;
&lt;/span&gt;Specifically, if the user starts debugging with F5, the project builds
to the debug configuration output path; however, if the user builds through the
menu the project builds to the release output path.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Very complicated.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The good news is there are a couple of events a host can
hook into through DTE.BuildEvents which can be used to determine the build
location.&lt;span&gt;&amp;nbsp; &lt;/span&gt;These events are the
OnBuildProjConfigBegin and OnBuildProjConfigDone events (you should only need
to hook into one of these).&lt;span&gt;&amp;nbsp; &lt;/span&gt;Below is
code from a modified ShapeAppCSharp sample (this will work for VSTA v 1 and v
2) which catches these events and outputs the configuration and build path for
the macro project.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;private&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; EnsureIDE()&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;this&lt;/span&gt;.dte == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&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;IDTEProvider&lt;/span&gt; dteProvider = (&lt;span&gt;IDTEProvider&lt;/span&gt;)&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;VSTADTEProviderClass&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;();&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&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:blue;"&gt;this&lt;/span&gt;.dte = (EnvDTE.&lt;span&gt;DTE&lt;/span&gt;)dteProvider.GetDTE(&lt;span&gt;"ShapeAppCSharp"&lt;/span&gt;,
0);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&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;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Assert(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.dte != &lt;span style="color:blue;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&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:green;"&gt;// If DTEProvider does not work, try
co-creating DTE instead.&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&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:blue;"&gt;object&lt;/span&gt; objDTE = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span&gt;DTE&lt;/span&gt;();&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&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:blue;"&gt;this&lt;/span&gt;.dte = (EnvDTE.&lt;span&gt;DTE&lt;/span&gt;)objDTE;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Save a copy of the event sync locations so they don't
get&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// garbage collected.&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.buildEvents = dte.Events.BuildEvents;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.solutionEvents = dte.Events.SolutionEvents;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.dteEvents = dte.Events.DTEEvents;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.buildEvents.OnBuildDone += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;EnvDTE.&lt;span&gt;_dispBuildEvents_OnBuildDoneEventHandler&lt;/span&gt;(BuildEvents_OnBuildDone);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.solutionEvents.AfterClosing += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;EnvDTE.&lt;span&gt;_dispSolutionEvents_AfterClosingEventHandler&lt;/span&gt;(solutionEvents_AfterClosi&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;ng);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.dteEvents.OnBeginShutdown
+= &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;EnvDTE.&lt;span&gt;_dispDTEEvents_OnBeginShutdownEventHandler&lt;/span&gt;(dteEvents_OnBeginShutdown);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.buildEvents.OnBuildProjConfigBegin += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;EnvDTE.&lt;span&gt;_dispBuildEvents_OnBuildProjConfigBeginEventHandler&lt;/span&gt;(buildEvents_OnBuil&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;dProjConfigBegin);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.buildEvents.OnBuildProjConfigDone += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;EnvDTE.&lt;span&gt;_dispBuildEvents_OnBuildProjConfigDoneEventHandler&lt;/span&gt;(buildEvents_OnBuild&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;ProjConfigDone);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;
buildEvents_OnBuildProjConfigDone(&lt;span style="color:blue;"&gt;string&lt;/span&gt;
Project, &lt;span style="color:blue;"&gt;string&lt;/span&gt; ProjectConfig, &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;string&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt; Platform, &lt;span style="color:blue;"&gt;string&lt;/span&gt; SolutionConfig, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;
Success)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\n Try OnBuildProjconfigDone"&lt;/span&gt;);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\t ProjectConfig "&lt;/span&gt; + ProjectConfig);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\t SolutionConfig "&lt;/span&gt; +
SolutionConfig);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;GetAssemblyPath(macroProject);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;
buildEvents_OnBuildProjConfigBegin(&lt;span style="color:blue;"&gt;string&lt;/span&gt;
Project, &lt;span style="color:blue;"&gt;string&lt;/span&gt; ProjectConfig,&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;string&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt; Platform, &lt;span style="color:blue;"&gt;string&lt;/span&gt; SolutionConfig)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\n Try OnBuildProjConfigBegin"&lt;/span&gt;);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\t ProjectConfig "&lt;/span&gt; + ProjectConfig);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\t SolutionConfig "&lt;/span&gt; +
SolutionConfig);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;GetAssemblyPath(macroProject);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;static&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; GetAssemblyPath(EnvDTE.&lt;span&gt;Project&lt;/span&gt; vsProject)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; fullPath = vsProject.Properties.Item(&lt;span&gt;"FullPath"&lt;/span&gt;).Value.ToString();&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; outputPath = &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item(&lt;span&gt;"OutputPat&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;h"&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;).Value.ToString();&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; outputDir = &lt;span&gt;Path&lt;/span&gt;.Combine(fullPath,
outputPath);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; outputFileName = &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;vsProject.Properties.Item(&lt;span&gt;"OutputFileName"&lt;/span&gt;).Value.ToString();&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; assemblyPath = &lt;span&gt;Path&lt;/span&gt;.Combine(outputDir,
outputFileName);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n\n Try #"&lt;/span&gt;);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;System.Diagnostics.&lt;span&gt;Debug&lt;/span&gt;.Write(&lt;span&gt;"\n ActiveConfig:&lt;span&gt;&amp;nbsp;
&lt;/span&gt;"&l