<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Visual Studio Tools for Applications</title><subtitle type="html" /><id>http://blogs.msdn.com/vsta/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/vsta/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-03-16T08:51:00Z</updated><entry><title>VSTA DTEProvider has the ability to launch Visual Studio</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2009/05/17/vsta-dteprovider-has-the-ability-to-launch-visual-studio.aspx" /><id>http://blogs.msdn.com/vsta/archive/2009/05/17/vsta-dteprovider-has-the-ability-to-launch-visual-studio.aspx</id><published>2009-05-18T02:24:05Z</published><updated>2009-05-18T02:24:05Z</updated><content type="html">&lt;p&gt;In VSTA 2.0, you can use DTEProvider to launch Visual Studio instead of VSTA, which can be helpful for debugging or provide additional functionalities for users who already have Visual Studio installed. For example, in ShapeAppCSharpMacroRecording sample, in EnsureIDE function of VstaDesignTimeIntegration.cs you can change the code of&lt;/p&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="color: #2b91af"&gt;IDTEProvider dteProvider = &lt;br&gt;             (IDTEProvider)&lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: #2b91af"&gt;VSTADTEProviderClass();
&lt;/span&gt;&lt;span style="color: blue"&gt;this.dte = (EnvDTE.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DTE)dteProvider.GetDTE&lt;br&gt;                                   (&lt;/span&gt;&lt;/font&gt;&lt;span style="color: #a31515"&gt;&lt;font size="2"&gt;"ShapeAppCSharp", 0);&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&lt;font color="#000000"&gt;to&lt;/font&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="color: #2b91af"&gt;IDTEProvider2 dteProvider2 = &lt;br&gt;             (IDTEProvider2)&lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: #2b91af"&gt;VSTADTEProviderClass();
&lt;/span&gt;&lt;span style="color: blue"&gt;this.dte = (EnvDTE.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DTE)dteProvider2.GetVSDTE&lt;br&gt;                                   (&lt;/span&gt;&lt;/font&gt;&lt;span style="color: #a31515"&gt;&lt;font size="2"&gt;"ShapeAppCSharp", 0);&lt;/font&gt;&lt;/pre&gt;&lt;font color="#000000"&gt;Now Run ShapeApp, launch IDE and Visual Studio will be launched.&lt;/font&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9624596" width="1" height="1"&gt;</content><author><name>VSTABlog</name><uri>http://blogs.msdn.com/members/VSTABlog.aspx</uri></author><category term="VSTA" scheme="http://blogs.msdn.com/vsta/archive/tags/VSTA/default.aspx" /></entry><entry><title>Using WPF in VSTA 2.0</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2009/05/10/using-wpf-in-vsta-2-0.aspx" /><id>http://blogs.msdn.com/vsta/archive/2009/05/10/using-wpf-in-vsta-2-0.aspx</id><published>2009-05-10T21:02:00Z</published><updated>2009-05-10T21:02:00Z</updated><content type="html">&lt;P&gt;In VSTA 2.0, you have the ability to use WPF. In this post, we will show a simple example to add video to a VSTA add-in using WPF. We will start with ShapeAppCSharpBasic Example. Launch VSTA using "vsta.exe /hostid ShapeAppCSharp", Create a new C# project choosing ShapeAppCSharp-AppLevel template, accept the default name: 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_6.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=266 alt=image src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_thumb_2.png" width=404 border=0 mce_src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_thumb_2.png"&gt;&lt;/A&gt; 
&lt;P&gt;Go to Project Menu, choose "Add Windows Form ..." to add a WinForm. Choose "Add User Control " to add a WPF user control:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_4.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=269 alt=image src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_thumb_1.png" width=404 border=0 mce_src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Open Toolbox, in Controls group, drag MediaElement control onto the WPF user control. Resize and position the MediaElement properly. If you do not have a sample video file, you can download one of the Visual Studio "How Do I?" &lt;A href="http://msdn.microsoft.com/en-us/vstudio/bb507746.aspx" mce_href="http://msdn.microsoft.com/en-us/vstudio/bb507746.aspx"&gt;videos&lt;/A&gt;. Rename the video to sample.wmf and put it under "c:\temp". MediaElement requires at least Window Media Player 11. If needed, &lt;A class="" title="Windows Media Player 11" href="http://www.microsoft.com/windows/windowsmedia/download/AllDownloads.aspx" target=_blank mce_href="http://www.microsoft.com/windows/windowsmedia/download/AllDownloads.aspx"&gt;download&lt;/A&gt; and install Window Media Player 11. 
&lt;P&gt;Now in XAML view, add source attribute to the MediaElement like:&lt;PRE class=code&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;MediaElement &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Margin&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="12,22,23,27" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="mediaElement1" &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: blue"&gt;              &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="c:\temp\sample.wmv"/&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Note for simplicity, the video file path is hardcoded and we simply play the video when the WPF user control is loaded and will not go into the rich functionality of MediaElement. 
&lt;P&gt;Build the project. If you get compilation error like "The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)", remove the corresponding "using System.Linq;" accordingly. 
&lt;P&gt;Go to the WinForm control we added, open Toolbox, in WPF interoperability group, drag ElementHost onto the WinForm, and in ElementHost Tasks pop-up window, choose the WPF user control we created: UserControl1, as the Hosted Content: 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_8.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=259 alt=image src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_thumb_3.png" width=404 border=0 mce_src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/UsingWPFinVSTA2.0_9B43/image_thumb_3.png"&gt;&lt;/A&gt; 
&lt;P&gt;In AppAddIn.cs, add the following code to AppAddIn_Startup:&lt;/P&gt;&lt;PRE class=code&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: blue"&gt;private void &lt;/SPAN&gt;AppAddIn_Startup(&lt;SPAN style="COLOR: blue"&gt;object &lt;/SPAN&gt;sender, &lt;SPAN style="COLOR: #2b91af"&gt;EventArgs &lt;/SPAN&gt;e)
{
    &lt;SPAN style="COLOR: #2b91af"&gt;Form1 &lt;/SPAN&gt;f = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Form1&lt;/SPAN&gt;();
    f.ShowDialog();
}&lt;/FONT&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Build again and run the project. Voila! You now have a video introduction for ShapeApp!&lt;/P&gt;
&lt;P&gt;Enzhou Wang&lt;BR&gt;Software Development Engineer&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9600774" width="1" height="1"&gt;</content><author><name>VSTABlog</name><uri>http://blogs.msdn.com/members/VSTABlog.aspx</uri></author><category term="VSTA" scheme="http://blogs.msdn.com/vsta/archive/tags/VSTA/default.aspx" /></entry><entry><title>Additional information about VSTA</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2009/01/15/additional-information-about-vsta.aspx" /><id>http://blogs.msdn.com/vsta/archive/2009/01/15/additional-information-about-vsta.aspx</id><published>2009-01-16T01:59:00Z</published><updated>2009-01-16T01:59:00Z</updated><content type="html">&lt;P&gt;Just providing a link to my blog here, that has some information captured about VSTA&lt;/P&gt;
&lt;P&gt;&lt;A class="" title=http://blogs.msdn.com/sandeep_bhatia href="http://blogs.msdn.com/sandeep_bhatia" mce_href="http://blogs.msdn.com/sandeep_bhatia"&gt;http://blogs.msdn.com/sandeep_bhatia&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9321868" width="1" height="1"&gt;</content><author><name>VSTABlog</name><uri>http://blogs.msdn.com/members/VSTABlog.aspx</uri></author><category term="Other blogs" scheme="http://blogs.msdn.com/vsta/archive/tags/Other+blogs/default.aspx" /></entry><entry><title>Creating a Host Item Template</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2008/06/05/creating-a-host-item-template.aspx" /><id>http://blogs.msdn.com/vsta/archive/2008/06/05/creating-a-host-item-template.aspx</id><published>2008-06-06T01:55:39Z</published><updated>2008-06-06T01:55:39Z</updated><content type="html">&lt;p&gt;The VSTA SDK provides samples and help topics that show you how to dynamically add host items to VSTA add-in projects. However, If you've read the topic &amp;quot;How to: Add and Remove Host Items in an Add-in Project&amp;quot;, you might have been a bit confused by the following code snippet:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/HostItemTemplatesWhydoIneedoneHowdoIcrea_CE32/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="158" alt="image" src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/HostItemTemplatesWhydoIneedoneHowdoIcrea_CE32/image_thumb_3.png" width="454" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Where did the value of this last parameter come from? The documentation does not make this very clear, so I will quickly explain.&lt;/p&gt;  &lt;p&gt;This parameter refers to the location of a host item template. &lt;/p&gt;  &lt;p&gt;The host item template is just a file that contains code that want to appear inside of a host item class that you dynamically create. &lt;/p&gt;  &lt;p&gt;The code featured in the example above refers to the host item template that ships with the samples. For your application, you must create your own host item template.&amp;#160; Your template does not have to match the one featured in the sample.&amp;#160; It can contain anything that you want. &lt;/p&gt;  &lt;p&gt;However, you might want to make use of two replacement variables that are featured in the host item template of the sample: [!output SAFE_NAMESPACE_NAME] and [!output SAFE_CLASS_NAME].&amp;#160; &lt;/p&gt;  &lt;p&gt;VSTA will replace these variables when you create the host item.&amp;#160; [!output SAFE_NAMESPACE_NAME] is replaced with the namespace of your add-in project and [!output SAFE_CLASS_NAME] is replaced with the name (first parameter) that you pass into the AddProjectHostItem() method. &lt;/p&gt;  &lt;p&gt;Once you have created your host item template, you can pass the location of that template to the AddProjectHostItem method to create host item classes in your add-in project.&lt;/p&gt;  &lt;p&gt;Norm E.&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8576452" width="1" height="1"&gt;</content><author><name>VSTABlog</name><uri>http://blogs.msdn.com/members/VSTABlog.aspx</uri></author></entry><entry><title>Learn about VSTA customer success stories and innovations in VSTA 2.0, tune into our webcast on Sep 27, 2007 at 9 AM PST</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2007/08/27/learn-about-vsta-customer-success-stories-and-innovations-in-vsta-2-0-tune-into-our-webcast-on-sep-27-2007-at-9-am-pst.aspx" /><id>http://blogs.msdn.com/vsta/archive/2007/08/27/learn-about-vsta-customer-success-stories-and-innovations-in-vsta-2-0-tune-into-our-webcast-on-sep-27-2007-at-9-am-pst.aspx</id><published>2007-08-27T23:37:00Z</published><updated>2007-08-27T23:37:00Z</updated><content type="html">&lt;P&gt;Come join us for a webcast on September 27, 2007 at 9:00 AM PST to learn about customer success stories who are using&amp;nbsp;VSTA and the innovations we have made in VSTA 2.0.&lt;/P&gt;
&lt;P&gt;Naveen Yajaman, Program Manager on the VSTA team will be presenting. &lt;/P&gt;
&lt;P&gt;For more event details and registration:&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;A href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032351235&amp;amp;Culture=en-US"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032351235&amp;amp;Culture=en-US&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;In this session we will discuss customer success stories using VSTA v1.0. We will also have demos of the new features in VSTA v2.0 and some discussion around that. It will be a&amp;nbsp;good&amp;nbsp;forum to ask questions.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4597540" width="1" height="1"&gt;</content><author><name>VSTABlog</name><uri>http://blogs.msdn.com/members/VSTABlog.aspx</uri></author><category term="VSTA" scheme="http://blogs.msdn.com/vsta/archive/tags/VSTA/default.aspx" /></entry><entry><title>How to Integrate the .NET Framework SDK Documentation with VSTA</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2007/05/17/how-to-integrate-the-net-framework-sdk-documentation-with-vsta.aspx" /><id>http://blogs.msdn.com/vsta/archive/2007/05/17/how-to-integrate-the-net-framework-sdk-documentation-with-vsta.aspx</id><published>2007-05-18T05:36:59Z</published><updated>2007-05-18T05:36:59Z</updated><content type="html">&lt;p&gt;The InfoPath team shows you how to integrate the .Net Framework help into the VSTA IDE for InfoPath. Make sure you follow the note about starting InfoPath as an administrator if you are using &lt;a href="http://technet.microsoft.com/en-us/windowsvista/aa906023.aspx"&gt;Windows Vista with UAC&lt;/a&gt; turned on (which you should be doing and is the default behavior)&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;Read more here on the &lt;/font&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;a href="http://blogs.msdn.com/infopath/default.aspx"&gt;InfoPath team blog&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;&lt;font size="3"&gt;.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/infopath/archive/2007/05/17/how-to-integrate-the-net-framework-sdk-documentation-with-vsta.aspx"&gt;How to Integrate the .NET Framework SDK Documentation with VSTA&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="1"&gt;This blog post greatly expands upon the MSDN online help.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-us/library/aa944989(VS.80).aspx" href="http://msdn2.Microsoft.com/en-us/library/aa944989(VS.80).aspx"&gt;&lt;font size="1"&gt;http://msdn2.Microsoft.com/en-us/library/aa944989(VS.80).aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;-&lt;a href="http://blogs.msdn.com/pstubbs/"&gt;Paul&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2704441" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>VSTA Video: VSTA at a glance</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2007/04/27/vsta-video-vsta-at-a-glance.aspx" /><id>http://blogs.msdn.com/vsta/archive/2007/04/27/vsta-video-vsta-at-a-glance.aspx</id><published>2007-04-27T19:23:08Z</published><updated>2007-04-27T19:23:08Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/harrymiller"&gt;Harry Miller&lt;/a&gt; who is a documentation writer on the VSTO and VSTA team has created a short &lt;a href="http://go.microsoft.com/?linkid=6676089"&gt;video&lt;/a&gt; that looks at VSTA. This video does an excellent job at explaining at a high level (manager view) what is VSTA, what are some of the features and how it is integrated. &lt;/p&gt; &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=6676089"&gt;Watch video&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAataglance_8390/image%7B0%7D%5B1%5D.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="235" src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAataglance_8390/image%7B0%7D.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;ShapeApp sample application.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAataglance_8390/image%7B0%7D%5B3%5D.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAataglance_8390/image%7B0%7D%5B2%5D.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;ShapeApp macro recording.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAataglance_8390/image%7B0%7D%5B5%5D.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAataglance_8390/image%7B0%7D%5B4%5D.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;ShapeApp macro generated code&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I also want to thank &lt;a href="http://blogs.msdn.com/kathleen/archive/2007/04/27/vsta-video-visual-studio-tools-for-applications-at-a-glance.aspx"&gt;Kathleen&lt;/a&gt; for working with Harry to post this on her blog. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2300855" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>VSTA powers Solgenia customizations</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2007/04/19/vsta-powers-solgenia-customizations.aspx" /><id>http://blogs.msdn.com/vsta/archive/2007/04/19/vsta-powers-solgenia-customizations.aspx</id><published>2007-04-20T00:58:07Z</published><updated>2007-04-20T00:58:07Z</updated><content type="html">&lt;p&gt;Solgenia is one the of first ISV customers to integrate Visual Studio Tools for Applications (VSTA) into their GeoMap software suite.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/rfustino"&gt;Russ Fustino&lt;/a&gt;&amp;nbsp;will be doing a demo of Solgenia's VSTA integration at &lt;a href="http://www.microsoft.com/events/teched2007/default.mspx"&gt;Teched 2007&lt;/a&gt; in Orlando this June.&lt;/p&gt; &lt;p&gt;Read more about VSTA on Solgenia's site &lt;a title="http://www.solgenia.com/include/read.asp?lang=&amp;amp;IdArt=5342&amp;amp;IdCat=426" href="http://www.solgenia.com/include/read.asp?lang=&amp;amp;IdArt=5342&amp;amp;IdCat=426"&gt;http://www.solgenia.com/include/read.asp?lang=&amp;amp;IdArt=5342&amp;amp;IdCat=426&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.solgenia.com/eportal/modules/econtent/BINARI/ART_4752/AnalysisGEOMAP%2Ejpg"&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2197836" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>VSTA Video: VSTA Overview</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2007/03/28/vsta-video-vsta-overview.aspx" /><id>http://blogs.msdn.com/vsta/archive/2007/03/28/vsta-video-vsta-overview.aspx</id><published>2007-03-28T19:26:38Z</published><updated>2007-03-28T19:26:38Z</updated><content type="html">&lt;p&gt;By now you have seen Visual Studio Tools for Applications in Office InfoPath 2007 and have been wondering about how to integrate VSTA into your applications. Watch Eric and Naveen&amp;nbsp;take you through the features and design goals of VSTA.&lt;/p&gt; &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=6459751"&gt;Watch Now&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=6459751" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTAVideoVSTAOverview_14FBF/image02.png" width="240" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1977995" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author><category term="VSTA" scheme="http://blogs.msdn.com/vsta/archive/tags/VSTA/default.aspx" /><category term="Video" scheme="http://blogs.msdn.com/vsta/archive/tags/Video/default.aspx" /></entry><entry><title>VSTA 2005 SDK Launch Announcement</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2007/03/27/vsta-2005-sdk-launch-announcement.aspx" /><id>http://blogs.msdn.com/vsta/archive/2007/03/27/vsta-2005-sdk-launch-announcement.aspx</id><published>2007-03-27T19:46:15Z</published><updated>2007-03-27T19:46:15Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTA2005SDKLaunchAnnouncement_895B/image0%5B1%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="66" src="http://blogs.msdn.com/blogfiles/vsta/WindowsLiveWriter/VSTA2005SDKLaunchAnnouncement_895B/image0.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I am pleased to announce the release of the &lt;strong&gt;Visual Studio 2005 Tools for Applications Software Development Kit (SDK)&lt;/strong&gt;. VSTA allows Independent Software Vendors (ISV) and enterprises to add application customization to their applications. Microsoft InfoPath 2007 has integrated VSTA. You can see VSTA in action by designing an InfoPath form and pressing Alt-Shift-F12 to launch the VSTA development environment. Think of VSTA as the managed alternative to VBA. VSTA and VBA can also run side by side within the same application so your users can create customizations in the language that makes sense for them. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7C2EA8AE-E051-449A-9051-3A351BF27B7F&amp;amp;displaylang=en"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7C2EA8AE-E051-449A-9051-3A351BF27B7F&amp;amp;displaylang=en"&gt;&lt;img title="" alt="" src="http://msdn2.microsoft.com/aa700828.Download_VSTA(en-us,MSDN.10).png"&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Get started today by &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7C2EA8AE-E051-449A-9051-3A351BF27B7F&amp;amp;displaylang=en"&gt;downloading the VSTA SDK&lt;/a&gt; and going through the walkthrough that takes you step by step through the integration of VSTA into a sample application called ShapeApp.&lt;/p&gt; &lt;p&gt;Be sure to visit the &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa700828.aspx"&gt;VSTA Developer Center&lt;/a&gt; for more details.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1965550" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>VSTA RTM's with the 2007 Office System</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2006/11/10/vsta-rtm-s-with-the-2007-office-system.aspx" /><id>http://blogs.msdn.com/vsta/archive/2006/11/10/vsta-rtm-s-with-the-2007-office-system.aspx</id><published>2006-11-10T18:07:00Z</published><updated>2006-11-10T18:07:00Z</updated><content type="html">&lt;SPAN&gt;&amp;nbsp; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;I am excited to announce that&lt;B&gt; Visual Studio Tools for Applications&lt;/B&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt; (VSTA) was released as an integrated component of the 2007 Office system earlier this week and is available to both Office developers and ISVs!&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;As Microsoft's future direction in application extensibility, VSTA provides a powerful customization toolset for ISVs, their customers, and their partners. Leveraging Visual Studio and .NET to provide managed extensibility, VSTA enables innovative customization scenarios while offering new levels of security and control. VSTA accelerates and simplifies the development of tailored solutions, helping ISVs grow their partner ecosystems and extend their market reach. &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;By integrating VSTA into their applications, ISVs give their customers a managed environment for tailoring applications to specific business needs.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Within VSTA, multiple configuration options offer ISVs deep control over the customization experience, and new technologies make it possible to develop more reliable, version-resilient extensions.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;You can think of it as the modern, scalable, and more secure version of VBA.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;This first release of VSTA makes numerous improvements over the VBA experience and includes many of the beloved VBA favorites.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Perhaps the feature most applauded by enterprise BDMs and SI’s is that VSTA customizations are seamlessly opened by any version of Visual Studio enabling professional developers to continue to enhance applications originally created by end user developers – a feature requested by many enterprises because applications often grow in sophistication over time.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;A brief rundown of this feature packed release of VSTA includes:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Leverages the innovative Visual Studio (VS) toolset &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Multi-language support – VB and C# &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Macro Recoding &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Windows Forms designer&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;IntelliSense &amp;amp; Code Tasks&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;End-user debugging features: breakpoints, watch/auto/locals windows&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Supports connected systems development&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Web services-based development&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Fully leverages the .NET Framework&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Running and debugging 32-bit and 64-bit add-ins&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Running partial trusted add-ins&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Client and Server programming&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Common VSTA/VSTO runtime architecture for seamless up-leveling of solutions&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Graduated host integration capabilities – “use what you need when you need it”&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Low barrier to entry – get started in about two days&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Add more functionality as desired/needed over time&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Runs side x side with VBA &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Add-in Management&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Simplifies loading and unloading of add-ins&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Ability to manage application domain creation&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Host defined discovery and qualification supporting repository based scenarios&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;VSTA SDK includes&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Redistributable VS based IDE and Runtime&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Integration tools&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Samples and walk throughs&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol"&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&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: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Help documentation&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Find out more about VSTA &lt;A title=http://msdn.microsoft.com/vstudio/extend/vsta/ href="http://msdn.microsoft.com/vstudio/extend/vsta/" target=_blank&gt;&lt;U&gt;&lt;FONT color=#800080&gt;here&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;, including how to download the VSTA SDK and learn about the simplified and transparent ISV pricing model.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Happy Customization!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"&gt;KD Hallman&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;General Manager&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Microsoft - Developer Division&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1054370" width="1" height="1"&gt;</content><author><name>VSTABlog</name><uri>http://blogs.msdn.com/members/VSTABlog.aspx</uri></author><category term="Office" scheme="http://blogs.msdn.com/vsta/archive/tags/Office/default.aspx" /><category term="VSTA" scheme="http://blogs.msdn.com/vsta/archive/tags/VSTA/default.aspx" /></entry><entry><title>VBA and VSTA side by side</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2006/07/31/684514.aspx" /><id>http://blogs.msdn.com/vsta/archive/2006/07/31/684514.aspx</id><published>2006-08-01T00:24:00Z</published><updated>2006-08-01T00:24:00Z</updated><content type="html">&lt;P&gt;One of the cool features of VSTA is that it can exist side by side with VBA in the host application. This allows hosts to slowly migrate their users to managed code over time. &lt;A href="http://cs.summsoft.com/content/VisualStudioToolsforApplications.aspx"&gt;Summit&lt;/A&gt; has created a sample walkthrough showing you how to integrate VBA and VSTA into the SDK sample application, ShapeApp.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://cs.summsoft.com/content/VSTAVBASidebySide.aspx"&gt;Integrating VSTA with an Unmanaged VBA-Enabled Application&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Paul Stubbs&lt;BR&gt;Program Manager&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=684514" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>Unloading an Add-In</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2006/07/13/664920.aspx" /><id>http://blogs.msdn.com/vsta/archive/2006/07/13/664920.aspx</id><published>2006-07-13T23:55:00Z</published><updated>2006-07-13T23:55:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;It has been a while since I’ve blogged, and I still haven’t delivered on my &lt;A href="http://blogs.msdn.com/vsta/archive/2006/03/16/552926.aspx"&gt;promise&lt;/A&gt; that I would explain how to control the AppDomain into which an add-in will be loaded.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’m not going to deliver on that promise today, either; mostly because I think that before I can dig into some of the more advanced performance and partial-trust scenarios supported by the AddInManager, we need to talk about how to shut down add-ins that are already running.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Once the add-in is loaded, all that needs to be done is to call AddIn.Unload specifying an appropriate timeout value.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Calling this method notifies the add-in that it needs to do any cleanup, and then tears down the add-ins domain.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;This brings us to another one of the classes in the &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:stockticker w:st="on"&gt;AIM&lt;/st1:stockticker&gt;: the AppDomainBinding.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The AppDomainBinding is used to track which add-ins are loaded into which AppDomains.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For example, in the event that you do not want to unload the AppDomain after the add-in unloads, you can set the AddIn.AppDomainBinding.AutoUnload property to false.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In general, this is not a good practice, since unloading the AppDomain is the only means of unloading code in the CLR, but the functionality is there if you need it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The reason for auto-unloading the AppDomain by default is that since an assembly by itself cannot be unloaded, we must tear down the entire AppDomain to ensure that the user’s code has stopped executing.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Another interesting point about unloading is that it isn’t guaranteed to terminate.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What if the user’s code contains an infinite loop in their OnShutdown handler?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Avoiding this and other potential pitfalls caused by bugs in end-user’s code has become an entire discipline itself, so I won’t go into it here.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Suffice to say there is an easy way that you can avoid the 80% case of an add-in failing to shut down: pass a timeout value to Unload.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;By doing so, the &lt;st1:stockticker w:st="on"&gt;AIM&lt;/st1:stockticker&gt; executes the add-ins shutdown logic on another thread and waits for it to finish within the specified timeout.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If it does not, the thread is aborted and the AppDomain unloaded without further delay.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are a myriad of other things that a poorly-written or malicious add-in can do to cause the hosting application to hang, but passing an appropriate timeout value should be a help in handing some of the more common errors from preventing the add-in from unloading.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Aaron Hare,&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Software Developer&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=664920" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>External Process Debugging in VSTA</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2006/04/14/576690.aspx" /><id>http://blogs.msdn.com/vsta/archive/2006/04/14/576690.aspx</id><published>2006-04-15T01:40:00Z</published><updated>2006-04-15T01:40:00Z</updated><content type="html">&lt;P&gt;VSTA was faced with some interesting problems when it came to the add-in developer’s debugging experience. VSTA is built on Visual Studio 2005 and .Net Framework 2.0. The debugging model in these products is a cycle of Build-Start-Debug and eventually Stop. Each time the developer wants to debug the application, the IDE builds output if needed, launches a new instance of it under the debugger and allows the user to take control with the debugger. When debugging ends via the user hitting Stop in the IDE, the debugger terminates the application forcefully. No finalizers run, no cleanup code executes. The application simply ceases to be. This model is supported by VSTA, but many host applications are not designed to be terminated at arbitrary execution points. The host app might be in the middle of writing out to a file, or performing a normally atomic operation. Terminating the app at these locations may result in data corruption and / or very angry add-in developers. Luckily, VSTA has a solution we call&amp;nbsp;External Process Debugging.&amp;nbsp; There are two External Debugging scenarios in VSTA. Internally, we call these non-destructive debugging (NDD) and Alt-F11 (named after the shortcut key for launching the VBA IDE in Office). &lt;/P&gt;
&lt;P&gt;With External Process Debugging, the add-in being debugged is executed in a process separate from the host application. It is almost entirely transparent to the add-in that it is not running within the host’s process. Furthermore, the work required for the host to support this model is fairly small and transparent.&amp;nbsp; When the add-in developer wants to debug, a new instance of the external process is created. This debugging process either launches a new instance of the host application and the two are connected (NDD), or it attaches to an already existing instance of the host (Alt-F11). The add-in is then loaded in the external process and objects from the&amp;nbsp;object model in the host process. When debugging ends, the IDE forcefully terminates the external process. The host application receives a notification that debugging has ended. In response, it cleans up its state and can either gracefully exit (NDD), or reload the in-process (Alt-F11).&lt;/P&gt;
&lt;P&gt;Why two models of external execution? Because some hosts want to provide add-in developers with a more integrated experience similar to that of VBA which their users are accustomed to. Alt-F11 is a much more interactive developer experience. The host application is created first. While the user is working on the host application, he/she decides a macro needs to be written or recorded. The host application opens an instance of the IDE and automates it externally. When the add-in developer decides its time to debug, they start debugging in the IDE and it appears that the addin runs in-process. When debugging ends, the host reloads the add-in in-process. &lt;/P&gt;
&lt;P&gt;In the NDD scenario, the user model is very different than that of VBA. The user starts developing in the VSTA IDE. There is not interactive experience between the add-in developer and the host application during development. Only when a debugging session begins, is an instance of the host created. &lt;/P&gt;
&lt;P&gt;Why an external process? The VSTA team’s first experience with this problem was in &lt;A HREF="/vsto2/"&gt;Visual Studio Tools for Office&lt;/A&gt; which is built on VSTA technology. In VSTO, there is a communication channel between the debugger and the host application running the add-in When debugging stops, VSTO is able to notify the app (in this case Word or Excel) and have it shutdown gracefully, even if the user has the application suspended at a breakpoint or stuck in an infinite loop. This technology was very complex, hard to implement and would only work with a few types of host applications. This led the VSTA team to search for a more general solution and this led to the external process. &lt;/P&gt;
&lt;P&gt;Jackson Davis,&lt;BR&gt;Developer&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=576690" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry><entry><title>Loading an Add-In</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vsta/archive/2006/03/16/552926.aspx" /><id>http://blogs.msdn.com/vsta/archive/2006/03/16/552926.aspx</id><published>2006-03-16T18:51:00Z</published><updated>2006-03-16T18:51:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;In my last entry, &lt;A id=bp___v____ctl0__ctl0_bcr_r___postlist___EntryItems__ctl1_PostTitle HREF="/vsta/archive/2006/02/13/531064.aspx"&gt;Using the Add-In Manager to Load and Unload Add-Ins&lt;/A&gt;&lt;/SPAN&gt; &lt;SPAN style="FONT-FAMILY: Arial"&gt;, I mentioned the Microsoft.VisualStudio.Tools.Applications.AddInManager.dll assembly and that it contains classes that can be used to load add-ins into a hosting application.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I also promised that I’d write another entry that explained how to do just that.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This time around, we’ll actually get into some of the code.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;By default, the classes in the Add-In Manager load add-ins into their own AppDomains, which the Add-In Manager will create automatically.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This can be accomplished easily using a piece of code like this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt"&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;AddIn&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt; addIn = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;AddIn&lt;/SPAN&gt;(&lt;SPAN style="COLOR: maroon"&gt;"My Arbitrary AddIn Name"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: maroon"&gt;@"c:\myaddins\myaddin.dll"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;AddInCollection&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt; addInCollection = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;AddInCollection&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial; mso-no-proof: yes"&gt;addInCollection.Add(addIn);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;Context&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt; addInContext = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;Context&lt;/SPAN&gt;(&lt;SPAN style="COLOR: maroon"&gt;"My Arbitrary Context Name"&lt;/SPAN&gt;, myHostItemProvider);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial; mso-no-proof: yes"&gt;addInContext.Add(addInCollection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;addIn.Load(&lt;SPAN style="COLOR: maroon"&gt;@"c:\mycodebase"&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Let’s examine this example in detail.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;First, we instantiate an AddIn that will be used to load the add-in assembly “c:\myaddins\myaddin.dll”.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We give it a name to identify it later, which is also going to be used as the FriendlyName of the AppDomain that will be created for it later on.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Note that at this point we haven’t loaded any code or created an AppDomain; all we’ve done is provided some data about the add-in so that we can load it later.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Next the AddInCollection is instantiated and the AddIn added to the collection. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;As I mentioned earlier this step might seem superfluous at the moment, but for the time being it is necessary.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Finally, we create the context, again with an arbitrary name for identification.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;We’ll also supply our IHostItemProviderContract implementation to the Context, which will be passed into each add-in when it starts up.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The IHostItemProviderContract is basically the mechanism through which the add-in bootstraps communicates with the hosting application.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Details on implementing IHostItemProviderContract are provided in the VSTA SDK documentation, so I won’t go into that here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;The last method call to AddIn.Load actually does all the work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The Add-In Manager creates a new fully-trusted AppDomain with the ApplicationBase property set to “c:\ mycodebase.”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Note that the ApplicationBase is passed to the Load function, the path information passed to the AddIn’s constructor is not used here.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Behind the scenes, the Add-In Manager then uses a combination of Assembly.LoadFrom and Assembly.Load to load the add-in passed to the constructor into the new AppDomain.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That sounds a little complicated, but it results in the behavior that one would expect: the path information specified to the constructor will be honored if no assembly with the correct name can be found in the GAC or the ApplicationBase.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Once the add-in assembly has been loaded into the target domain, the Add-In Manager invokes its constructor and starts calling various methods on it to start it up.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This eventually results in a method called InternalStartup being called, and an OnStartup event being fired.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;These are the two main entry points to the user’s add-in code.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The user’s code will most likely advise on some events of the object model in this method, or do any other necessary startup work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Once the initialization code completes, the add-in is in a state that we call “Loaded,” meaning that the AddIn.IsLoaded property will be true.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For the most part, you can think of “Loaded” as meaning “Executing” when it pertains to the Add-In Manager, since there is no concept of a “The assembly is loaded but not yet executing” state.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;So, that’s a simple rundown of how the Add-In Manager loads add-ins by default.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Of course, we’ve designed the Add-In Manager so that it also supports loading add-ins into specific AppDomains.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We’ve also built-in numerous other features to support partially-trusted add-ins.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;More on that later.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Aaron Hare&lt;BR&gt;Software Design Engineer&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=552926" width="1" height="1"&gt;</content><author><name>pstubbs</name><uri>http://blogs.msdn.com/members/pstubbs.aspx</uri></author></entry></feed>