<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Carlos Quintero (Microsoft MVP) blog : The strange case of...</title><link>http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx</link><description>Tags: The strange case of...</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>The strange case of VS 2010 (Beta 2 /CTPs) closing at startup or failing to create add-ins</title><link>http://msmvps.com/blogs/carlosq/archive/2009/10/20/vs-2010-beta-2-dependency-on-msxml-6-0-to-create-add-ins-or-parse-addin-files.aspx</link><pubDate>Tue, 20 Oct 2009 11:12:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1733644</guid><dc:creator>carlosq</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1733644</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1733644</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/10/20/vs-2010-beta-2-dependency-on-msxml-6-0-to-create-add-ins-or-parse-addin-files.aspx#comments</comments><description>&lt;p&gt;As you know if you develop add-ins, Visual Studio 2005 introduced XML-based add-ins that use an .AddIn file that you must place in the &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/09/02/mz-tools-articles-series-update-info-default-addin-file-locations-for-visual-studio-add-ins.aspx"&gt;proper folder for Visual Studio to show the add-in in the Add-In Manager&lt;/a&gt;. Which XML parser Visual Studio uses to parse .AddIn files wouldn&amp;#39;t be of interest if it wasn&amp;#39;t because for some people their &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/11/04/the-strange-case-of-empty-add-in-manager-not-showing-xml-based-add-ins.aspx"&gt;Add-In Manager didn&amp;#39;t show XML-based add-ins... and the problem was solved installing MSXML&lt;/a&gt;. While I didn&amp;#39;t experience that problem personally, I have experienced a related problem with VS 2010 Beta2 and older CTPs.&lt;/p&gt;
&lt;p&gt;The problem was that when I tried to create an add-in with the add-in wizard I got this misleading error message (misleading because I &lt;i&gt;do&lt;/i&gt; have the proper language installed).&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;An error occurred, and the wizard could not generate the project. Verify that the programming language is properly installed&amp;quot;&lt;/p&gt;
&lt;p&gt;And more interestingly, if a place an .AddIn file (even an empty .AddIn file!) in one of the folders that VS scans for .AddIn files, VS 2010 fails to load with the following error message:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;The application cannot start&amp;quot;&lt;/p&gt;
&lt;p&gt;and then it closes!&lt;/p&gt;
&lt;p&gt;I remembered the problem of the empty Add-In Manager, I thought it could be related, so I verified with the &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/09/16/mz-tools-articles-series-howto-using-the-process-monitor-procmon-tool-to-diagnose-visual-studio-add-ins-problems.aspx"&gt;Process Monitor&lt;/a&gt; tool that VS was certainly failing to get the MSXML2.Document.6.0 ProgId from the registry just before scanning folders for .AddIn files. I installed MSXML 6.0 and lo and behold, the problem was solved.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So, I discussed this with several people inside the VS team and they confirmed that VS 2010 will use MSXML 6.0 to parse .AddIn files, etc. (I am not sure if VS 2005/2008 uses that version or older ones). It happens that I was using a virtual machine with Windows XP SP2, and it doesn&amp;#39;t include MSXML 6.0 (it includes MSXML 3.0 SP5), but &lt;i&gt;VS 2010 Beta 2 / CTPs didn&amp;#39;t install it either&lt;/i&gt;. When I asked why VS 2010 didn&amp;#39;t install it as a prerequisite, the answer was that VS 2010 will require SP3 of Windows XP (which includes MSXML6), and the final release of VS 2010 will refuse to install on Windows XP SP2, something that the current betas / CTPs don&amp;#39;t enforce yet.&lt;/p&gt;
&lt;p&gt;Now I hope that the Visual Studio Team modifies VS 2010 to show better behavior and diagnostics if, for whatever reason, Visual Studio doesn&amp;#39;t find the MSXML parser that it requires. We as developers tend to focus on code paths where things go as expected, and pay less attention to edge cases, but when things go bad, it causes a lot of pain to other people trying to diagnose and solve the problem. Something better than silent errors (empty Add-In Manager), crashes without further information or misleading error messages can be done...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1733644" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category><category domain="http://msmvps.com/blogs/carlosq/archive/tags/VS+2010/default.aspx">VS 2010</category></item><item><title>The strange case of error 0x80070005 "Access Denied" using PEVerify.exe with an add-in referencing a Visual Studio assembly not in the GAC</title><link>http://msmvps.com/blogs/carlosq/archive/2009/06/29/the-strange-case-of-error-0x80070005-quot-access-denied-quot-using-peverify-exe-with-an-add-in-referencing-a-visual-studio-assembly-not-in-the-gac.aspx</link><pubDate>Mon, 29 Jun 2009 15:35:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1697124</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1697124</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1697124</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/06/29/the-strange-case-of-error-0x80070005-quot-access-denied-quot-using-peverify-exe-with-an-add-in-referencing-a-visual-studio-assembly-not-in-the-gac.aspx#comments</comments><description>&lt;p&gt;It took me quite a lot of time to fix the problem of &lt;a href="http://msmvps.com/blogs/carlosq/archive/2009/06/29/mz-tools-articles-series-prb-peverify-exe-causes-problem-verifying-add-in-with-referenced-assemblies-from-visual-studio-not-in-the-gac.aspx"&gt;Error 0x80070002 &amp;quot;The system cannot find the file specified&amp;quot; using PEVerify.exe to verify add-in with referenced assemblies from Visual Studio not in the GAC&lt;/a&gt;. I found the problem yesterday Sunday afternoon when I was with my laptop at a Starbucks with no connection to Internet other than a very weak GPRS connection with my mobile phone, so I could only get on the web that the solution was to use the codeBase tag in a .config file. The file that I used was:&lt;/p&gt;
&lt;pre class="article_code" id="Code1"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;   &amp;lt;runtime&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;assemblyBinding xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;dependentAssembly&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;assemblyIdentity name=&amp;quot;Microsoft.VisualStudio.Data.Interop&amp;quot; publicKeyToken=&amp;quot;b03f5f7f11d50a3a&amp;quot; culture=&amp;quot;neutral&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;codeBase version=&amp;quot;8.0.0.0&amp;quot; href=&amp;quot;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependentAssembly&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/assemblyBinding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/runtime&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Using this file I got this other error:&lt;/p&gt;
&lt;p&gt;0x80070005 &amp;quot;Access Denied&amp;quot; &lt;/p&gt;
&lt;p&gt;rather than:&lt;/p&gt;
&lt;p&gt;0x80070002 &amp;quot;The system cannot find the file specified&amp;quot;.&lt;/p&gt;
&lt;p&gt;So today with more Internet connectivity I have been investigating the problem. The only reference to this problem was &lt;a href="http://blogs.msdn.com/suzcook/archive/2003/05/29/57120.aspx"&gt;Debugging Assembly Loading Failures&lt;/a&gt;, where Suzzane Cook stated the obvious, to check file locks without shared-read access and ACLs. But this was not the problem.&lt;/p&gt;
&lt;p&gt;The fusion log showed this:&lt;/p&gt;
&lt;pre&gt;LOG: GAC Lookup was unsuccessful.&lt;br /&gt;LOG: Attempting download of new URL file:///C:/Program Files/Microsoft Visual Studio 8/Common7/IDE.&lt;br /&gt;LOG: Assembly download was successful. Attempting setup of file: C:\Program Files\Microsoft Visual Studio 8\Common7\IDE&lt;br /&gt;LOG: Entering run-from-source setup phase.&lt;br /&gt;ERR: Error extracting manifest import from file (hr = 0x80070005).&lt;br /&gt;ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated.&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;So I was clueless until I found the string &amp;quot;ERR: Error extracting manifest import from file&amp;quot; in a .rc file inside&amp;nbsp; &lt;a href="http://www.koders.com"&gt;www.koders.com&lt;/a&gt;, the site that has the source code of some open source portions of the .NET Framework CLR and tools. The string led me to the identifier ID_FUSLOG_MANIFEST_EXTRACT_FAILURE which in turn led me to the following code in the bindhelpers.cpp file:&lt;/p&gt;
&lt;p&gt;HRESULT BindToSystem(IAssemblyName *pNameSystem, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPCWSTR pwzSystemDirectory,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IUnknown *pUnk, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAssembly **ppAsmOut,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAssembly **ppNIAsmOut,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IFusionBindLog **ppdbglog)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hr = S_OK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAssembly *pAsm = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAssembly *pCAsm = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CNativeImageAssembly *pAsmNI = NULL;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwSize = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAssemblyManifestImport *pAsmImport = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INativeImageEvaluate *pNIEva = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WCHAR wzManifestFilePath[MAX_PATH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAssemblyName *pName = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static BOOL bCalled = FALSE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDebugLog *pdbglog = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOL&amp;nbsp;&amp;nbsp;&amp;nbsp; bFoundInDevOverride = FALSE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MEMORY_REPORT_CONTEXT_SCOPE(&amp;quot;FusionBindToSystem&amp;quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!pNameSystem || !ppAsmOut || CAssemblyName::IsPartial(pNameSystem) || !CAssemblyName::IsStronglyNamed(pNameSystem) || !pwzSystemDirectory){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return E_INVALIDARG;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ppAsmOut = NULL;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // should only be called once.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bCalled) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ppAsmOut = g_pSystemAssembly;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (g_pSystemAssembly) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pSystemAssembly-&amp;gt;AddRef();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return S_OK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (IsLoggingNeeded()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDebugLog::Create(NULL, pNameSystem, NULL, &amp;amp;pdbglog);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wzManifestFilePath[0]= L&amp;#39;\0&amp;#39;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pUnk) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = pUnk-&amp;gt;QueryInterface(IID_INativeImageEvaluate, (void **)&amp;amp;pNIEva);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // temporary IAssemblyName for mscorlib&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pSystemAssemblyName = pNameSystem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pSystemAssemblyName-&amp;gt;AddRef();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // we are here because we cannot find the custom assembly,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // or we are not asked for a custom assembly. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!bFoundInDevOverride) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = CAssemblyName::CloneForBind(pNameSystem, &amp;amp;pName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = CreateAssemblyFromCacheLookup(NULL, pName, ppAsmOut, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr) &amp;amp;&amp;amp; hr != HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hr == S_OK) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBUGOUT(pdbglog, 1, ID_FUSLOG_CACHE_LOOKUP_SUCCESS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBUGOUT(pdbglog, 1, ID_FUSLOG_ASSEMBLY_LOOKUP_FAILURE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwSize = MAX_PATH;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = StringCchPrintf(wzManifestFilePath, MAX_PATH, L&amp;quot;%ws%ws.dll&amp;quot;, pwzSystemDirectory, SYSTEM_ASSEMBLY_NAME);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBUGOUT1(pdbglog, 0, ID_FUSLOG_ATTEMPT_NEW_DOWNLOAD, wzManifestFilePath);&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = CreateAssemblyFromManifestFile(wzManifestFilePath, NULL, NULL, ppAsmOut);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBUGOUT1(pdbglog, 1, ID_FUSLOG_MANIFEST_EXTRACT_FAILURE, hr);&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Exit:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pdbglog) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdbglog-&amp;gt;SetResultCode(FUSION_BIND_LOG_CATEGORY_DEFAULT, hr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DUMPDEBUGLOG(pdbglog, g_dwLogLevel);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DUMPDEBUGLOGNGEN(pdbglog, g_dwLogLevel);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ppdbglog) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ppdbglog = pdbglog;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdbglog-&amp;gt;AddRef();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(g_pSystemAssemblyName);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SUCCEEDED(hr)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCAsm = static_cast&amp;lt;CAssembly *&amp;gt;(*ppAsmOut); // dynamic_cast&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCAsm-&amp;gt;SetIsSystemAssembly(TRUE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pSystemAssembly = *ppAsmOut;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pSystemAssembly-&amp;gt;AddRef();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pSystemAssembly-&amp;gt;GetAssemblyNameDef(&amp;amp;g_pSystemAssemblyName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(*ppAsmOut);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(pdbglog);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(pAsmImport);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(pAsm);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(pAsmNI);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(pNIEva);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAFERELEASE(pName);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bCalled = TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return hr;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;I have marked in bold the relevant code. It was not until I saw the name of the function &lt;b&gt;CreateAssemblyFromManifestFile&lt;/b&gt; when I realized that I had to specify the full file name and not the folder of the assembly in the .config file. Once modified to the following it worked without errors:&lt;/p&gt;
&lt;pre class="article_code" id="Code1"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;   &amp;lt;runtime&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;assemblyBinding xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;dependentAssembly&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;assemblyIdentity name=&amp;quot;Microsoft.VisualStudio.Data.Interop&amp;quot; publicKeyToken=&amp;quot;b03f5f7f11d50a3a&amp;quot; culture=&amp;quot;neutral&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;codeBase version=&amp;quot;8.0.0.0&amp;quot; href=&amp;quot;&lt;b&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\Microsoft.VisualStudio.Data.Interop.dll&lt;/b&gt;&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependentAssembly&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/assemblyBinding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/runtime&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;The &amp;quot;access denied&amp;quot; error was misleading since it would be more useful to keep showing the &amp;quot;file not found&amp;quot; error.&lt;/p&gt;
&lt;p&gt;Now, imagine the time that you could save diagnosing problems in extensions for Visual Studio if you could have access to the Visual Studio source code, even without being able to debug, just debugging with the brain as I did...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1697124" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of Add Resource \ New Image menu empty when an add-in is loaded in Visual Studio</title><link>http://msmvps.com/blogs/carlosq/archive/2009/06/26/the-strange-case-of-add-resource-new-image-menu-empty-when-an-add-in-is-loaded-in-visual-studio.aspx</link><pubDate>Fri, 26 Jun 2009 21:05:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1696819</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1696819</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1696819</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/06/26/the-strange-case-of-add-resource-new-image-menu-empty-when-an-add-in-is-loaded-in-visual-studio.aspx#comments</comments><description>&lt;p&gt;These days I have been playing a lot with &lt;a href="http://msmvps.com/blogs/carlosq/archive/2009/06/26/mz-tools-articles-series-updated-howto-creating-custom-pictures-for-visual-studio-net-add-ins-commands-buttons-and-toolwindows.aspx"&gt;resource images in managed satellite dlls&lt;/a&gt; and one thing that I was noticing sporadically was that the Add Resource \ New Image menu on the toolbar of the document window of a resource.resx file was empty, while it should have the typical &amp;quot;Bmp image&amp;quot;, &amp;quot;Png image&amp;quot;, etc. menu entries. Since I was playing with 32-bit bitmaps images with transparency in the alpha channel that cannot be created with Visual Studio, most of the time I was using a 3rd party bitmap editor and using the Add Resource \ Add Existing File... menu. But nonetheless, I was intrigued by the missing submenus in the New Image menu. Today that I finished my investigation of the managed satellite dlls, I decided to investigate the issue.&lt;/p&gt;
&lt;p&gt;The first thing that I noticed was that the issue was not reported on the web, or maybe only mentioned once without a solution, which was strange because I could reproduce the problem on two computers on mine. I was clueless when I discovered by chance that the problem happened only when I had my &lt;a href="http://www.mztools.com"&gt;MZ-Tools add-in&lt;/a&gt; loaded in Visual Studio on startup. After a few minutes of debugging I isolated the problem: it happened when the toolbar of the add-in was created, so I was able to create a minimal add-in to reproduce the problem and report it to Microsoft:&lt;/p&gt;
&lt;p&gt;The Add Resource\New Image menu empty when VS add-in creates a toolbar&lt;br /&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=470755"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=470755&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The problem happens with VS 2005 and 2008, but it is fixed in VS 2010 Beta 1, likely due to its new WPF-based commandbars.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1696819" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of Visual Studio getting "out of memory"</title><link>http://msmvps.com/blogs/carlosq/archive/2009/06/09/the-strange-case-of-visual-studio-getting-quot-out-of-memory-quot.aspx</link><pubDate>Tue, 09 Jun 2009 08:11:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1694682</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1694682</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1694682</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/06/09/the-strange-case-of-visual-studio-getting-quot-out-of-memory-quot.aspx#comments</comments><description>&lt;p&gt;I started programming in the old times of 16-bit MS-DOS, where you had only 640 KB of memory, and you had concepts like &amp;quot;expanded memory&amp;quot; and &amp;quot;extended memory&amp;quot; and memory bank switching to use more than 640 KB and then wonderful things like the &lt;a href="http://en.wikipedia.org/wiki/Watcom_C_compiler"&gt;Watcom C++&lt;/a&gt; compiler that allowed you to create linear 32-bit MS-DOS programs to use all the available memory, not just 640 KB or 1 &lt;span style="text-decoration:line-through;"&gt;GB&lt;/span&gt; MB (oops!). When Windows (95) became a 32-bit OS and I learned at college about 32 bit pointers, it seemed that 4 GB of memory will be enough &lt;i&gt;forever&lt;/i&gt;. Guess what? Some weeks ago I got &amp;quot;out of memory&amp;quot; errors from Visual Studio when trying some features of my &lt;a href="http://www.mztools.com"&gt;MZ-Tools add-in&lt;/a&gt; that operate on every file of a solution. Specifically, the problem happened when iterating the code elements of the EnvDTE.ProjectItem.FileCodeModel of every file of the solution. My computer had 4 GB of RAM so I was surprised by this error (later I learned that the amount of RAM is irrelevant for most &amp;quot;out of memory&amp;quot; errors in modern virtual memory operating systems).&lt;/p&gt;
&lt;p&gt;The first reference that I found on the web about this error was in the MSDN VSX forum:&lt;/p&gt;
&lt;p&gt;ProjectItem.FileCodeModel causes memory fragmentation?&lt;br /&gt;&lt;a href="http://social.microsoft.com/Forums/en-US/vsx/thread/9d6c1d17-63c8-40c4-b6bc-e7f0ead65c3d"&gt;http://social.microsoft.com/Forums/en-US/vsx/thread/9d6c1d17-63c8-40c4-b6bc-e7f0ead65c3d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notice that while MSFT people explained that this is due to COM objects in memory wrapped by .NET objects that are not released, the explanation does not solve the problem, neither the manipulation of the Garbage Collector (GC). I didn&amp;#39;t try using EnvDTE.Project.CodeModel because it didn&amp;#39;t meet my needs of &amp;quot;file by file&amp;quot; processing.&lt;/p&gt;
&lt;p&gt;Then I found that mine was not the only extension for Visual Studio experiencing this problem. &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/OutOfMemoryException+Fix"&gt;Resharper was also experiencing it and provided some tools to fix it&lt;/a&gt;. But it was non until I read this post when I learned about the cause and (kind of) solution for this problem:&lt;/p&gt;
&lt;p&gt;Hacking Visual Studio to Use More Than 2Gigabytes of Memory&lt;br /&gt;&lt;a href="http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx"&gt;http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, the problem is not the lack of physical memory (RAM) or virtual memory, but the address space of 32-bit processes, which is limited to 4 GB and half of it is reserved for the OS (kernel mode) so the process has only 2 GB for it (user mode). And using the file code model of every file of a solution can cause Visual Studio to reach the limit of 2 GB of its user-mode address space. Using the /3GB option in the boot.ini file allows 3 GB of address space for the user mode part of the process and 1 GB for the kernel mode part, which can cause other problems because 1 GB is little these days for some video cards, etc. &lt;/p&gt;
&lt;p&gt;Also, to take advantage of the 3 GB address space, a process must be &amp;quot;marked&amp;quot; to indicate the OS that it can use all those memory addresses. This is done with the &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/wz223b1z(VS.80).aspx"&gt;LARGEADDRESSAWARE&lt;/a&gt; &lt;/i&gt;flag in the executable image that Visual Studio 2008 does have set, but Visual Studio 2005 doesn&amp;#39;t (although you can patch it with the editbin utility as explained in the link above).&lt;/p&gt;
&lt;p&gt;In my case, using the /3GB option in boot.ini with VS 2008 &amp;quot;solved&amp;quot; the problem and using the Task Manager I saw devenv.exe passing the limit of 2 GB without causing the &amp;quot;OutOfMemory&amp;quot; exception. I say &amp;quot;solved&amp;quot; because this is not really a happy solution, it is not something that you can patch in your add-in, you need to show a message explaining the user to either use Windows 64-bit (which gives 32-bit processes the full 4 GB address space for user-mode) or to use the /3GB option with Windows 32-bit (that can cause other problems, in my case with two other applications). &lt;/p&gt;
&lt;p&gt;So, 32-bit pointers and 4 GB are not enough these days... maybe with 64-bit pointers we&amp;#39;ll have these problems solved forever.&lt;/p&gt;
&lt;p&gt;There is a bunch of very interesting resources on the web about all this, starting by the Raymond Chen&amp;#39;s series:&lt;/p&gt;
&lt;p&gt;Summary of the recent spate of /3GB articles&lt;br /&gt;&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2004/08/22/218527.aspx"&gt;http://blogs.msdn.com/oldnewthing/archive/2004/08/22/218527.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and this one of today:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Out Of Memory&amp;rdquo; Does Not Refer to Physical Memory &lt;br /&gt;&lt;a href="http://blogs.msdn.com/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx"&gt;http://blogs.msdn.com/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1694682" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of Microsoft.mshtml assembly missing</title><link>http://msmvps.com/blogs/carlosq/archive/2009/04/17/the-strange-case-of-microsoft-mshtml-assembly-missing.aspx</link><pubDate>Fri, 17 Apr 2009 09:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1688353</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1688353</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1688353</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/04/17/the-strange-case-of-microsoft-mshtml-assembly-missing.aspx#comments</comments><description>&lt;p&gt;I received the following bug report from a customer:&lt;/p&gt;
&lt;p&gt;System.IO.FileNotFoundException: File or assembly name Microsoft.mshtml, or one of its dependencies, was not found.&lt;/p&gt;
&lt;p&gt;My &lt;a href="http://www.mztools.com"&gt;MZ-Tools add-in&lt;/a&gt; references this component. Actually it doesn&amp;#39;t use it&amp;nbsp; (it was for future HTML/ASP.NET support) but that doesn&amp;#39;t matter. AFAIK, that component was installed by every installation of Visual Studio, because it is used for the ASP.NET/HTML designers (which until VS 2008 were IE-based). How could be that the customer didn&amp;#39;t have it?&lt;/p&gt;
&lt;p&gt;It turned out that the customer was using Visual Studio .NET 2003 and that he installed only Visual C++, neither VB.NET nor C#. It seems that Visual C++ 2003 doesn&amp;#39;t use that component, and as soon as he installed VB.NET, the component was installed...&lt;/p&gt;
&lt;p&gt;BTW, it seems that each time that I think about dropping support for VS.NET 2003 and concentrating only in VS 2005, 2008 and 2010 with .NET 2.0, I receive an e-mail from someone that happens to use VS.NET 2003... definitely developers of commercial add-ins &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/11/26/how-many-visual-studio-versions-does-my-add-in-package-have-to-support.aspx"&gt;need to support old versions of Visual Studio for many years&lt;/a&gt;....&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-size:10pt;"&gt;&lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:Arial;font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1688353" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of &lt;Unknown Error&gt; 8013150A loading a Visual Studio add-in</title><link>http://msmvps.com/blogs/carlosq/archive/2009/03/24/the-strange-case-of-lt-unknown-error-gt-8013150a-loading-a-visual-studio-add-in.aspx</link><pubDate>Tue, 24 Mar 2009 13:02:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1680997</guid><dc:creator>carlosq</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1680997</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1680997</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/03/24/the-strange-case-of-lt-unknown-error-gt-8013150a-loading-a-visual-studio-add-in.aspx#comments</comments><description>&lt;p&gt;Visual Studio add-ins are not very friendly when trying to auto-update them (at least as of Visual Studio 2008), so when deploying an add-in for internal use within an organization, one creative idea is to put the assembly dll in a shared network folder and register the add-in from there in each computer without copying it to the hard disks. You can do this putting the XML .AddIn file in that same folder and adding that folder to the list of locations that VS uses when searching for add-ins (Tools, Options menu, Environment, Add-in/Macros security). During the day you won&amp;#39;t be able to update the add-in assembly because it will be in use by the developers, but chances are that you will be able to do it at night (with some automated mechanism).&lt;/p&gt;
&lt;p&gt;There is still a problem, though. As of .NET Framework 3.5 (without SP1) and below, by default assemblies in shared network folders lack FullTrust permission required to run add-ins, because shared folders belong to the LocalIntranet_Zone, which has a LocalIntranet permission set, not a FullTrust permission set. This was an incovenience not only for add-ins, but also for general .NET applications, and since &lt;a href="http://msdn.microsoft.com/en-us/library/fkytk30f.aspx"&gt;configuring the .NET runtime security policy is not trivial&lt;/a&gt;, I guess that Microsoft got tired of support calls and complaints from developers and IT staffs and in SP1 of .NET Framework 3.5 they changed things to allow .NET assemblies to run with FullTrust permission from shared network folders (you can revert back this change if you want the old behavior).&lt;/p&gt;
&lt;p&gt;Note: &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/11/14/net-frameworks-clrs-and-visual-studio-add-ins.aspx"&gt;.NET Framework 3.5, 3.0 and 2.0 share the same CLR, so it&amp;#39;s CLR 2.0 what matters for security and add-ins&lt;/a&gt;, not the .NET Framework.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;So, the question I was wondering is: can then a .NET 2.0 add-in run from a shared network location without further security configuration changes? I did the test, and I got this nice COM error: 8013150A (not very helpful as usual). If I changed the permissions to FullTrust in that shared network location, it worked, so I have enhanced my article about troubleshooting with a mention to this error:&lt;/p&gt;
&lt;p&gt;HOWTO: Troubleshooting Visual Studio and Office add-ins&lt;br /&gt;&lt;a href="http://www.mztools.com/articles/2007/MZ2007009.aspx"&gt;http://www.mztools.com/articles/2007/MZ2007009.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The only remaining thing to clarify is why the security policy change doesn&amp;#39;t work with add-ins. Well, it happens that this is by &amp;quot;design&amp;quot;, it doesn&amp;#39;t work with ClickOnce applications or applications that are designed to run on a host:&lt;/p&gt;
&lt;p&gt;Running Intranet Applications in Full Trust&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc713717.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc713717.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1680997" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of ProjectItem.Open(EnvDTE.Constants.vsext_vk_Designer) trying to check-out a form file</title><link>http://msmvps.com/blogs/carlosq/archive/2009/03/09/the-strange-case-of-projectitem-open-envdte-constants-vsext-vk-designer-trying-to-check-out-a-form-file.aspx</link><pubDate>Mon, 09 Mar 2009 15:10:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1676944</guid><dc:creator>carlosq</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1676944</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1676944</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/03/09/the-strange-case-of-projectitem-open-envdte-constants-vsext-vk-designer-trying-to-check-out-a-form-file.aspx#comments</comments><description>&lt;p&gt;Today I have solved a problem that was bugging me for months. I was aware of it but I hadn&amp;#39;t paid much attention to it (because I knew it was not a problem of my &lt;a href="http://www.mztools.com"&gt;MZ-Tools&lt;/a&gt; add-in) until today, when I decided to take a closer look. The problem was the following: whenever I executed one of the features of &lt;a href="http://www.mztools.com"&gt;MZ-Tools&lt;/a&gt; that reviews the designers of forms (such as the TabIndex review, the Access Keys review, etc.), of a solution under source control, the MDI form of the application became checked-out after the review and I had to undo the check-out by hand.&lt;/p&gt;
&lt;p&gt;The line of code that caused the check-out was, of course:&lt;/p&gt;
&lt;p&gt;ProjectItem.Open(EnvDTE.Constants.vsext_vk_Designer)&lt;/p&gt;
&lt;p&gt;and I knew that the problem was not MZ-Tools because opening the designer by hand in the IDE resulted also in a silent check-out. I noticed too that if I disconnected the solution from source control, in this case Visual Studio prompted to edit the read-only file with a dialog with buttons &amp;quot;Edit In-memory&amp;quot;, &amp;quot;Make Writeable&amp;quot; and &amp;quot;Cancel&amp;quot;. So, Visual Studio was really feeling the need of edit a designer file when opening it. But what was causing it?&lt;/p&gt;
&lt;p&gt;I have spent the whole morning prunning the project, the form and the code, with several oops-too-much-pruning-that-no-longer-reproduces-the-problem and finally I have a minimal reproducible pattern:&lt;/p&gt;
&lt;p&gt;1) Create a new Windows Forms project with Form1.&lt;/p&gt;
&lt;p&gt;2) Create a user control UserControl1 with this code:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Private Sub UserControl1_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Size = New Size(100, 100)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; End Sub&lt;/p&gt;
&lt;p&gt;3) Build the project so the usercontrol appears on the toolbox.&lt;/p&gt;
&lt;p&gt;4) Add the usercontrol to the form and set its Dock property to Fill.&lt;/p&gt;
&lt;p&gt;5) Build the project again&lt;/p&gt;
&lt;p&gt;6) Close all windows&lt;/p&gt;
&lt;p&gt;7) Close the solution&lt;/p&gt;
&lt;p&gt;8) Using the Windows Explorer, set the read-only attribute of the Form1*.* files&lt;/p&gt;
&lt;p&gt;9) Open the solution again&lt;/p&gt;
&lt;p&gt;10) Try to open the Form1.vb file in Design view. You get a prompt to edit the read-only file.&lt;/p&gt;
&lt;p&gt;I know it&amp;#39;s stupid to set the size of the usercontrol in the VisibleChanged event of a usercontrol that will be docked, but that was what the code was doing in the end ...&lt;/p&gt;
&lt;p&gt;So, the solutions are:&lt;/p&gt;
&lt;p&gt;1) Stop doing stupid things or...&lt;/p&gt;
&lt;p&gt;2) Change the code to the following, so it only executes at run-time:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Private Sub UserControl1_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not Me.Site.DesignMode Then&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Size = New Size(100, 100)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; End Sub&lt;/p&gt;
&lt;p&gt;Is there anything that an add-in can do when it encounters this situation? If VS shows a prompt, there is nothing that an add-in can do. But if VS does a silent check-out, or silently changes the read-only flag of files you can do something: get the read-only value before calling ProjectItem.Open(EnvDTE.Constants.vsext_vk_Designer), get it afterwards, compare them and it they are not the same you can inform the user that there is something wrong in the file or in the controls used in the file, and that the same problem would happen if he opens the designer by hand, so it&amp;#39;s not really add-in&amp;#39;s fault.&lt;/p&gt;
&lt;p&gt;Update (March 11, 2009): &lt;/p&gt;
&lt;p&gt;If the file is not read-only, then VS edits it behind the scenes and you get an unexpected prompt to save the changes when closing the solution.&lt;/p&gt;
&lt;p&gt;Also, I have found other pattern that reproduces the problem without wrong code:&lt;/p&gt;
&lt;p&gt;1) Create a Windows Form project in VS 2008&lt;/p&gt;
&lt;p&gt;2) Add a ListBox control to Form1 and set its Dock property to Fill&lt;/p&gt;
&lt;p&gt;3) Save the changes, close the windows, and close VS&lt;/p&gt;
&lt;p&gt;4) Using Windows Explorer, set the read-only attributes of the three Form1*.* files&lt;/p&gt;
&lt;p&gt;5) Open VS and load the solution&lt;/p&gt;
&lt;p&gt;6)  Try to open the Form1.vb file in Design view. You get a prompt to edit the read-only file.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1676944" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of infinite recursion in an add-in severely crashing Visual Studio 2005 and 2008</title><link>http://msmvps.com/blogs/carlosq/archive/2009/02/12/other-strange-case-of-an-add-in-severely-crashing-visual-studio.aspx</link><pubDate>Thu, 12 Feb 2009 12:43:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1671750</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1671750</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1671750</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/02/12/other-strange-case-of-an-add-in-severely-crashing-visual-studio.aspx#comments</comments><description>&lt;p&gt;Don&amp;#39;t you love when Visual Studio severely crashes? I really hate those moments because I am always afraid that if it is a problem of VS and not a problem in my code, I am in trouble...&lt;/p&gt;
&lt;p&gt;Some time ago I explained &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/12/10/the-strange-case-of-visual-studio-2008-severely-crashing-loading-an-add-in.aspx"&gt;The strange case of Visual Studio 2008 severely crashing loading an add-in&lt;/a&gt; that was caused by Visual Studio commandbars. Fortunately the cause of this problem and a workaround was known.&lt;/p&gt;
&lt;p&gt;I also opened a bug report at Microsoft Connect due to &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=368580"&gt;Application of custom attribute crashes VS 2008 (VB) still with SP1 applied&lt;/a&gt;. This causes a crash in the VB 2008 compiler. While Microsoft closed the report as &amp;quot;not reproducible&amp;quot; I am glad that they have reopened it recently and they sent me some &amp;quot;dumping&amp;quot; tools to install on my computer and send them back more information to get a clue about the problem since it is not reproducible with a few lines of code. Hopefully this one can be fixed because it is preventing me to migrate to VS 2008.&lt;/p&gt;
&lt;p&gt;Yesterday I got a new severe crash while debugging my &lt;a href="http://www.mztools.com"&gt;MZ-Tools&lt;/a&gt; add-in. The crash was something like:&lt;/p&gt;
&lt;p&gt;Problem signature&lt;br /&gt;Problem Event Name:	APPCRASH&lt;br /&gt;Application Name:	devenv.exe&lt;br /&gt;...&lt;br /&gt;Fault Module Name:	kernel32.dll&lt;br /&gt;Fault Module Version:	6.0.6001.18000&lt;br /&gt;Fault Module Timestamp:	4791a76d&lt;br /&gt;Exception Code:	e053534f&lt;br /&gt;
Exception Offset:	000442eb&lt;/p&gt;
&lt;p&gt;Searching the web I only found a similar issue but it didn&amp;#39;t explain the cause or fix. The line of code crashing in my code was just setting the value of a class field, which seemed quite innocent. On Windows Vista the dialog didn&amp;#39;t offer the chance of sending it to MS but today on a Windows XP machine the dialog allowed me to send the bug report. But more importantly, after more careful debugging I realized that my code was calling the method of a class that called another method, and then other, and then other, and 10 calls later it was calling again the original method, causing an circular dependency that eventually crashed Visual Studio. For example this code reproduces the problem:&lt;/p&gt;
&lt;p&gt;public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; switch (connectMode)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ext_ConnectMode.ext_cm_Startup:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ext_ConnectMode.ext_cm_AfterStartup:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f1();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;void f1()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; f2();&lt;br /&gt;}&lt;br /&gt;void f2()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; f1();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;While the fault was in my code (I have already fixed it), I wondered if Visual Studio could show better information, such as an StackOverflowException or OutOfMemoryException or similar&amp;nbsp; (that would give me a hint about a circular dependency) rather than a crash in the kernel32.dll module. And guess what? I did a test and VS.NET 2003 shows a more friendly message with the StackOverflow exception indicating a too deep recursion. Somehow something was changed in VS 2005 and now Visual Studio behaves much worse crashing completely. So I have opened a bug report at Microsoft Connect (you are invited to vote to get it fixed):&lt;/p&gt;
&lt;p&gt;Add-in causing stack overflow causes &amp;quot;Microsoft Visual Studio has encountered a problem and needs to close&amp;quot;&lt;br /&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=414301"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=414301&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It happens that I had seen this very same problem in my code a couple of years ago but I had totally forgotten that such crashes in VS are sometimes produced by circular dependencies of methods in the code. I hope this helps other people (and me) when searching on the web a crash in a VS add-in in 
Exception Offset	000442eb of Kernel32.dll.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1671750" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of "%ALLUSERSPROFILE%\Datos de programa\Microsoft\MSEnvShared\AddIns" add-In file path</title><link>http://msmvps.com/blogs/carlosq/archive/2009/01/16/the-strange-case-of-quot-allusersprofile-datos-de-programa-microsoft-msenvshared-addins-quot-add-in-file-path.aspx</link><pubDate>Fri, 16 Jan 2009 07:58:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1662387</guid><dc:creator>carlosq</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1662387</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1662387</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2009/01/16/the-strange-case-of-quot-allusersprofile-datos-de-programa-microsoft-msenvshared-addins-quot-add-in-file-path.aspx#comments</comments><description>&lt;p&gt;(Or why it is a bad idea for an add-in to add add-in file paths to Visual Studio)&lt;/p&gt;
&lt;p&gt;When Visual Studio 2005 introduced XML-based add-ins, which used an .AddIn file rather than COM registration), rather than providing just two fixed folders to place such files (one for all users, other for the current user), Microsoft provided five (5!!) folders, listed in the Tools, Options menu, Environment, Add-in/Macros Security section.&lt;/p&gt;
&lt;p&gt;Not only that, Visual Studio allows to add more folders using the Add... button or programmatically writing to the &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AutomationOptions\LookInFolders&amp;quot; registry key (VS 2005).&lt;/p&gt;
&lt;p&gt;Not only that, you will have a difficult time expanding VS-proprietary placeholders like %VSAPPDATA%, %VSCOMMONAPPDATA% or %VSMYDOCUMENTS%, if your add-in setup wants to use one of those folders.&lt;/p&gt;
&lt;p&gt;Not only that, Visual Studio 2008 added a sixth folder, %ALLUSERSDOCUMENTS%\Microsoft\MSEnvShared\Addins.&lt;/p&gt;
&lt;p&gt;Not only that, Visual Studio 2008 actually fails to look for XML files in that new folder (see &lt;a href="http://www.mztools.com/articles/2008/MZ2008024.aspx"&gt;HOWTO: Using the Process Monitor (ProcMon) tool to diagnose Visual Studio add-ins problems&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;And not only that (finally), Visual Studio hardcoded &amp;quot;Application Data&amp;quot; in one of the paths (&amp;quot;%ALLUSERSPROFILE%\Application Data\Microsoft\MSEnvShared\Addins&amp;quot;) without taking into account that that folder is localized and in other languages it doesn&amp;#39;t exist with that name on the hard disk. For example, in Spanish, it is should be &amp;quot;%ALLUSERSPROFILE%\Datos de programa\Microsoft\MSEnvShared\AddIns&amp;quot;.&lt;/p&gt;
&lt;p&gt;I documented all that in the article &lt;a href="http://www.mztools.com/articles/2008/MZ2008001.aspx"&gt;INFO: Default .AddIn file locations for Visual Studio add-ins&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Guess what? Yesterday, while writing an utility that scans the add-in file paths, I noticed that on my Spanish computer Visual Studio 2005/2008 listed &amp;quot;%ALLUSERSPROFILE%\Datos de programa\Microsoft\MSEnvShared\AddIns&amp;quot; as one of the add-in file paths in the Tools, Options menu, Environment, Add-in/Macros Security section. Indeed VS 2005 listed 6 folders instead 5, and VS 2008 listed 7 folders instead of 6.&lt;/p&gt;
&lt;p&gt;How could that be? At first I thought that the service pack 1 of both IDEs could have &amp;quot;fixed&amp;quot; the problem adding the localized version of that path maintaining the wrong one (with &amp;quot;Application Data&amp;quot; hardcoded). But I quickly discarded that explanation because I had installed SP1 from long time and those folders were not there. Then I remembered that I had installed recently an add-in (I won&amp;#39;t cite its name), and looking into the contents of the &amp;quot;%ALLUSERSPROFILE%\Datos de programa\Microsoft\MSEnvShared\AddIns&amp;quot; folder, there was the .AddIn files of this add-in. So, the setup of this add-in is placing the .AddIn file in that folder, AND it is adding that folder to the &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AutomationOptions\LookInFolders&amp;quot;. In other words, it is trying to &amp;quot;fix&amp;quot; what Microsoft did wrong with that folder. But I think this is a bad idea for this reason: if this add-in is installed on a non-English computer and the user happens to be a developer of add-ins who is unaware of the problem of the hardcoded &amp;quot;Application Data&amp;quot; path, he will see two paths listed:&lt;/p&gt;
&lt;p&gt;%ALLUSERSPROFILE%\Application Data\Microsoft\MSEnvShared\Addins&lt;br /&gt;%ALLUSERSPROFILE%\Datos de programa\Microsoft\MSEnvShared\AddIns&lt;/p&gt;
&lt;p&gt;And certainly he will use the second one because any non-English developer knows that it is the correct one (using an API call to get the actual localized folder), but when his add-in is installed on another machine, the second path is not in the list of paths that VS scans, and the add-in won&amp;#39;t appear in the Add-In Manager.&lt;/p&gt;
&lt;p&gt;Placing the .AddIn file in the first path (%ALLUSERSPROFILE%\Application Data\Microsoft\MSEnvShared\Addins) is also a bad idea because the setup will create that English folder on non-English computers, and then the computers will have those two paths physically on the hard disk.&lt;/p&gt;
&lt;p&gt;So, what to do? I&amp;#39;d recommend to use the &amp;quot;%VSCOMMONAPPDATA%\AddIns&amp;quot; folder instead, which is also for all users but it neither mess the list of paths of Visual Studio nor creates English folders on non-English computers. The only drawback is that the folder is actually different each VS version:&lt;/p&gt;
&lt;p&gt;For Windows XP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS 2005: &amp;quot;C:\Documents and Settings\All Users\Application Data\Microsoft\VisualStudio\8.0\Addins&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;VS 2008: &amp;quot;C:\Documents and Settings\All Users\Application Data\Microsoft\VisualStudio\9.0\Addins&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For Windows Vista:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS 2005: &amp;quot;C:\ProgramData\Microsoft\VisualStudio\8.0\Addins&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;VS 2008: &amp;quot;C:\ProgramData\Microsoft\VisualStudio\9.0\Addins&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get it programmatically the custom action of your setup that copies the .AddIn file must call the API that returns special folders with the parameter  &lt;a href="http://msdn.microsoft.com/en-us/library/bb762494.aspx"&gt;CSIDL_COMMON_APPDATA&lt;/a&gt; and then concatenate 
         &amp;quot;Microsoft\VisualStudio\8.0\Addins&amp;quot; for VS 2005 or &amp;quot;Microsoft\VisualStudio\9.0\Addins&amp;quot; for VS 2008. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using the .NET Framework the call is System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Using the &lt;a href="http://www.jrsoftware.org/isdl.php"&gt;free InnoSetup installer&lt;/a&gt;, the PascalScript call is ExpandConstant(&amp;#39;{commonappdata}&amp;#39;) (see: &lt;a href="http://www.mztools.com/articles/2008/MZ2008010.aspx"&gt;HOWTO: Create a setup for a Visual Studio 2005 / 2008 add-in using Inno Setup&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Using the Win32 API, you can use the &lt;a href="http://msdn.microsoft.com/en-us/library/bb762180(VS.85).aspx"&gt;SHGetFolderLocation&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl13" href="http://msdn.microsoft.com/en-us/library/bb762181%28VS.85%29.aspx"&gt;SHGetFolderPath&lt;/a&gt;, &lt;a id="ctl00_rs1_mainContentContainer_ctl14" href="http://msdn.microsoft.com/en-us/library/bb762203%28VS.85%29.aspx"&gt;SHGetSpecialFolderLocation&lt;/a&gt;, and &lt;a id="ctl00_rs1_mainContentContainer_ctl15" href="http://msdn.microsoft.com/en-us/library/bb762204%28VS.85%29.aspx"&gt;SHGetSpecialFolderPath&lt;/a&gt; functions.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Being the path different for each VS version you can&amp;#39;t use a single .AddIn file with two hosts inside (HostApplication tags) for VS 2005 and VS 2008, but that&amp;#39;s a minor extra work for the setup of an add-in, and we all know that software is all about our users, not about us the developers...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1662387" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of Visual Studio 2008 severely crashing loading an add-in</title><link>http://msmvps.com/blogs/carlosq/archive/2008/12/10/the-strange-case-of-visual-studio-2008-severely-crashing-loading-an-add-in.aspx</link><pubDate>Wed, 10 Dec 2008 13:09:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1656379</guid><dc:creator>carlosq</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1656379</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1656379</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/12/10/the-strange-case-of-visual-studio-2008-severely-crashing-loading-an-add-in.aspx#comments</comments><description>&lt;p&gt;Some months ago a customer of my &lt;a href="http://www.mztools.com"&gt;MZ-Tools&lt;/a&gt; add-in reported a crash in Visual Studio 2008 Team Suite when loading it. When an add-in crashes loading it, usually Visual Studio captures the exception or COM error and shows a semi-friendly messagebox indicating that the add-in has caused an exception or failed to load, and give you the chance of removing it. While sometimes the error is &amp;lt;Unknown Error&amp;gt; and you get only the error number (specially if the problem is found by the CLR loading the add-in and not executing the code), this crash was more severe: &amp;quot;Visual Studio needs to close&amp;quot;, and your only options are to close or to restart. MZ-Tools doesn&amp;#39;t have instrumentation yet, but after a couple of custom builds with traces sent to the customer I was able to determine that the problem happened creating the very first toolbar. Somehow the customer changed to Visual Studio 2008 Professional Edition and the problem disappeared so I closed the incident (falsely).&lt;/p&gt;
&lt;p&gt;Last week it was a prospect who experienced the severe crash. It is not the best experience for a prospect to download a trial version of your product, install it and get such a crash. I knew that for such severe crashes the problem is not really my add-in but the prospect would think otherwise... Since the add-in is marked to load on startup, it crashes VS every time so chances are that he will uninstall and forget the product. But fortunately he reported it to me, so I troubleshooted it. After a couple of days verifying that the problem was actually MZ-Tools and not other extensions, that the referenced assemblies were present and that the versions were correct, I recalled this problem, that I had almost totally forgotten. I retreived the e-mails of the previous case, and the problem happened with VS 2008 Team Suite also this time. And when I was about to send him a minimal add-in that creates a toolbar to reproduce the problem, I searched the web and I found this post by Jamie Cansdale, former MVP colleague and author of &lt;a href="http://www.testdriven.net/"&gt;TestDriven.NET&lt;/a&gt; (formerly NUnitAddIn):&lt;/p&gt;
&lt;p&gt;VS 2008 crashes on startup when &amp;#39;Code Analysis Tools&amp;#39; feature is not installed&lt;br /&gt;&lt;a href="http://weblogs.asp.net/nunitaddin/archive/2007/11/29/vs-2008-crashes-on-startup-when-code-analysis-tools-feature-is-not-installed.aspx"&gt;http://weblogs.asp.net/nunitaddin/archive/2007/11/29/vs-2008-crashes-on-startup-when-code-analysis-tools-feature-is-not-installed.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, the problem happens in Visual Studio 2008 Team Suite if you don&amp;#39;t install the &amp;quot;Code Analysis Tools&amp;quot;. Since in the first case the user switched to Visual Studio 2008 Professional Edition, which doesn&amp;#39;t include the Code Analysis Tools (&lt;a href="http://msdn.microsoft.com/en-us/vs2008/products/cc149003.aspx#divAdvancedTools"&gt;only Visual Studio 2008 Development Edition or Visual Studio 2008 Team Suite&lt;/a&gt;), the problem disappeared. In the second case, the prospect run the setup again and certainly the Code Analysis Tools were not installed. After installing them, MZ-Tools loaded fine.&lt;/p&gt;
&lt;p&gt;Now, I have tried to reproduce the problem to report it to Microsoft to no avail:&lt;/p&gt;
&lt;p&gt;My computer has Visual Studio 2008 Team Suite with the Code Analysis Tools and SP1. I have removed the Code Analysis Tools and the problem doesn&amp;#39;t appear. I have removed the SP1 and nothing. I have removed VS 2008 completely and I have installed it from scratch without the Code Analysis Tools and the problem doesn&amp;#39;t appear. So, I don&amp;#39;t know yet how to reproduce but at least I am glad that I know how to solve it and hopefully I won&amp;#39;t forget it again (I&amp;#39;ll force myself to check the &amp;quot;&lt;a href="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx"&gt;The strange case of ...&lt;/a&gt;&amp;quot; series for those rare problems...)&lt;/p&gt;
&lt;p&gt;I have also updated this article:&lt;/p&gt;
&lt;p&gt;HOWTO: Troubleshooting Visual Studio and Office add-ins&lt;br /&gt;&lt;a href="http://www.mztools.com/articles/2007/MZ2007009.aspx"&gt;http://www.mztools.com/articles/2007/MZ2007009.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;UPDATE (Dec 11, 2008): Finally I have reproduced the problem with a clean virtual machine and Visual Studio 2008 Development Edition without the &amp;quot;Code Analysis Tools&amp;quot; and without installing SP1. The problem happens when an add-in performs certain operations with commandbars of DTE such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trying to create a toolbar&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Trying to retrieve an inexistent command bar&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Trying to set the Name property of a Commandbar&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Maybe others&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The problem can be solved through two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installing the missing &amp;quot;Code Analysis Tools&amp;quot; component&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Installing Service Pack 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While not many users are affected by this bug since most of them perform a full installation of Visual Studio 2008 and/or install SP1, the problem is so nasty that you may want to detect this circumstance and show a warning when loading your add-in. Something like the following in the OnConnection method before manipulating CommandBars:&lt;/p&gt;
&lt;p&gt;If IsVS2008TeamSuite() Or IsVS2008DevelopmentEdition() Then&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; If Not IsCodeAnalysisToolsComponentInstalled() Then&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not IsVS2008SP1Installed() Then&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;This add-in is going to crash :-(&amp;quot;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; End If&lt;/p&gt;
&lt;p&gt;End If&lt;/p&gt;
&lt;p&gt;Some details to implement those functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can detect if VS 2008 SP1 is installed using the registry key:&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSTS\&amp;lt;locale&amp;gt;, name &amp;quot;SP&amp;quot; for VS 2008 Team Suite&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSTD\&amp;lt;locale&amp;gt;, name &amp;quot;SP&amp;quot; for VS 2008 Development Edition&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Where
&amp;lt;locale&amp;gt; is the language of Visual Studio, such as 1033 for English, 3082
for Spanish, etc. Your add-in can get the locale of IDE using the DTE.LocaleID
property.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;The SP value can be 0 (no SP installed) or 1 (SP1 installed)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can detect if VS 2008 Team Suite installed if the registry key &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS\VSTS&amp;quot; exists&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;You can detect if VS 2008 Development Edition installed if the registry key
&amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS\VSTD&amp;quot;
exists&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;You can detect if the &amp;quot;Code Analysis Tools&amp;quot; component is installed getting the folder of VS 2008 (reading the &amp;quot;ProductDir&amp;quot; name under the registry key above), appending &amp;quot;Team Tools\Static Analysis Tools\FxCop&amp;quot; and checking if the file FxCopSdk.dll exists or not. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS 2008 without SP1 lacks the folder &amp;quot;Team Tools\Static Analysis Tools\FxCop&amp;quot; if Code Analysis Tools are not installed (as expected) &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;VS 2008 SP1 creates that folder even if you don&amp;#39;t have Code Analysis Tools installed, but it doesn&amp;#39;t add DLLs, just some Repository\Compatibility folder with some XML files&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1656379" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of toolwindow not showing when the add-in is loaded on startup</title><link>http://msmvps.com/blogs/carlosq/archive/2008/12/02/the-strange-case-of-toolwindow-not-showing-when-the-add-in-is-loaded-on-startup.aspx</link><pubDate>Tue, 02 Dec 2008 08:56:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655539</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1655539</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1655539</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/12/02/the-strange-case-of-toolwindow-not-showing-when-the-add-in-is-loaded-on-startup.aspx#comments</comments><description>&lt;p&gt;Visual Studio preserves the visibility state of its own toolwindows (Solution Explorer, etc.) but not of toolwindows created by add-ins. It is up to the add-in to store the state of its toolwindows when unloaded, and restore them when it is loaded again. So, some add-ins can show their toolwindows when loaded and not only when the menu to show them is invoked. However, some developers are noticing that in some cases toolwindows don&amp;#39;t show when the add-in is loaded on startup, but they show if the add-in is loaded by hand using the Add-In Manager. If this is the case, chances are that it is because you are not using the OnConnection method correctly and the IDE is not fully initialized when the add-in is trying to show its toolwindow:&lt;/p&gt;
&lt;p&gt;HOWTO: Use correctly the OnConnection method of a Visual Studio add-in&lt;br /&gt;&lt;a href="http://www.mztools.com/articles/2008/MZ2008004.aspx"&gt;http://www.mztools.com/articles/2008/MZ2008004.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is just one of the many side effects of a &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/09/25/regarding-the-idtextensibility2-interface.aspx"&gt;badly designed IDTExtensibility2 interface&lt;/a&gt; that populates the MSDN forum with related questions every week...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655539" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of add-in setup not detecting running instances of Visual Studio 2008 on Windows Vista</title><link>http://msmvps.com/blogs/carlosq/archive/2008/12/01/the-strange-case-of-add-in-setup-not-detecting-running-instances-of-visual-studio-on-windows-vista.aspx</link><pubDate>Mon, 01 Dec 2008 12:18:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655477</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1655477</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1655477</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/12/01/the-strange-case-of-add-in-setup-not-detecting-running-instances-of-visual-studio-on-windows-vista.aspx#comments</comments><description>&lt;p&gt;If you are creating a setup for your Visual Studio add-in, chances are that you don&amp;#39;t want running instances of Visual Studio when the add-in is going to be installed or uninstalled. For my &lt;a href="http://www.mztools.com/v6/mztools6.aspx"&gt;MZ-Tools add-in&lt;/a&gt;, I use the free &lt;a href="http://www.jrsoftware.org/isinfo.php"&gt;InnoSetup&lt;/a&gt;, which is script-based and uses Pascal for custom code, and I wrote an article some time ago about how to create a setup for a &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/04/02/mz-tools-articles-series-howto-create-a-setup-for-a-visual-studio-2005-2008-add-in-using-inno-setup.aspx"&gt;Visual Studio add-in using InnoSetup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A couple of weeks ago I noticed something strange: when running the setup on Windows Vista, it detected running instances of Visual Studio .NET 2002, 2003 and 2005, but not of Visual Studio 2008. Actually, I detected the problem on Windows 2008 Server with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&amp;amp;displaylang=en"&gt;Visual Studio 2010 CTP&lt;/a&gt;, but I was able to reproduce the problem with Windows Vista and Visual Studio 2008.&lt;/p&gt;
&lt;p&gt;The setup detects running instances of Visual Studio by using the GetActiveOleObject function for the ProgID of each Visual Studio version (&amp;quot;VisualStudio.DTE.7&amp;quot;, etc.):&lt;/p&gt;
&lt;pre&gt;function IsVSRunningByProgID(ProgID: String):Boolean;&lt;br /&gt;var&lt;br /&gt;   IDE: Variant;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;   try&lt;br /&gt;      IDE := GetActiveOleObject(ProgID);&lt;br /&gt;   except&lt;br /&gt;   end;&lt;br /&gt;&lt;br /&gt;   if VarIsEmpty(IDE) then&lt;br /&gt;      Result := False&lt;br /&gt;   else&lt;br /&gt;      Result := True&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;The GetActiveOleObject function returns a running (if any) COM (ActiveX) server given a ProgId. Somehow it was failing for Visual Studio 2008 whose ProgId is &amp;quot;VisualStudio.DTE.9.0&amp;quot;. I tried to reproduce the problem with a VB6 program using the GetObject function, and it worked, but I soon realized that the GetObject function of VB6 &lt;i&gt;always&lt;/i&gt; return an instance: if none is running, it creates one.&lt;/p&gt;
&lt;p&gt;Incidentally, the setup worked as expected on Windows XP so I suspected that the User Account Control (UAC) of Windows Vista (and Windows Server 2008) could be the culprit. And the final detail was that while Visual Studio .NET 2002, 2003 and 2005 require by default admin rights (so you get a &amp;quot;consent prompt&amp;quot; from the UAC of Windows Vista), Visual Studio 2008 was designed to run without admin rights, so it launches without &amp;quot;consent prompts&amp;quot; on Windows Vista, running as a standard user even if you are an administrator. Searching on the InnoSetup forums, I confirmed that on Windows Vista a process running with elevated priviledges (such as my setup) cannot interact with a COM process running with low priviledges (such as Visual Studio 2008), so the GetActiveOleObject call fails (&amp;quot;Operation unavailable&amp;quot;) and no instance is returned, as if no instance was executing. In fact, the setup worked as expected if I run Visual Studio 2008 as an administrator (using the context menu) and getting the &amp;quot;consent prompt&amp;quot; of the UAC.&lt;/p&gt;
&lt;p&gt;So, which is the solution for this problem? The forums mentioned something about mutexes or something that I am not willing to investigate, because sometimes when you devote a lot of time to a tough problem you realize that you don&amp;#39;t have a problem actually, or that it is not so severe. For example, an add-in can be installed perfectly even with Visual Studio running, it just needs to copy some files and add some registry entries. Its toolbar and menus won&amp;#39;t appear in the running instances of Visual Studio but if the user goes to the Add-In Manager, it will be there. There is only a problem when uninstalling the add-in, because removing the commands (and permanent UI if used) requires to persist the changes and if there is a running instance of Visual Studio the changes will be overwritten when this other instance is closed. But I guess I&amp;#39;ll have to live with that.&lt;/p&gt;
&lt;p&gt;For applications that are not setups, such as applications automating the IDE (or for setups that allow you to execute .NET code), you can use System.Diagnostics.Process.GetProcessByName(&amp;quot;devenv&amp;quot;) and it will work.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655477" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of &lt;Unknown Error&gt; 8013141A loading a Visual Studio add-in</title><link>http://msmvps.com/blogs/carlosq/archive/2008/11/28/the-strange-case-of-lt-unknown-error-gt-8013141a-loading-a-visual-studio-add-in.aspx</link><pubDate>Fri, 28 Nov 2008 08:37:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655305</guid><dc:creator>carlosq</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1655305</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1655305</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/11/28/the-strange-case-of-lt-unknown-error-gt-8013141a-loading-a-visual-studio-add-in.aspx#comments</comments><description>&lt;p&gt;A developer posted a couple of days ago in the MSDN forum about Visual Studio Extensibility that &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/7595965f-dc3e-4f05-95ce-039d5726acd7"&gt;loading his add-in caused and exception with error number &amp;lt;Unknown Error&amp;gt; (8013141A)&lt;/a&gt;. Of course, searching with Google doesn&amp;#39;t always offer much information about these bizarre errors, nor the tools of the Windows SDK for which this error is, well, unknown too. &lt;/p&gt;
&lt;p&gt;Since the section of my article about troubleshooting crashes in add-ins didn&amp;#39;t help much, I have enhanced it with further and more detailed explanations, and a mention to this error:&lt;/p&gt;
&lt;p&gt;HOWTO: Troubleshooting Visual Studio and Office add-ins&lt;br /&gt;&lt;a href="http://www.mztools.com/articles/2007/MZ2007009.aspx"&gt;http://www.mztools.com/articles/2007/MZ2007009.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655305" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of empty Add-In Manager (not showing XML-based add-ins)</title><link>http://msmvps.com/blogs/carlosq/archive/2008/11/04/the-strange-case-of-empty-add-in-manager-not-showing-xml-based-add-ins.aspx</link><pubDate>Tue, 04 Nov 2008 09:02:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1653013</guid><dc:creator>carlosq</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1653013</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1653013</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/11/04/the-strange-case-of-empty-add-in-manager-not-showing-xml-based-add-ins.aspx#comments</comments><description>&lt;p&gt;There is a problem that I have never experienced but it was happening for a few people in Visual Studio 2005 / 2008. The symptoms were:&lt;/p&gt;
&lt;p&gt;- The Add-In Manager is empty&lt;br /&gt;- The Add-In only shows registry-based add-ins, not XML-based add-ins (using an .AddIn file)&lt;/p&gt;
&lt;p&gt;Of course the first difficulty was to notice that the problem happened to several add-ins, not only a specific add-in. When you don&amp;#39;t see your add-in in the Add-in Manager, the first thought is that your add-in is not correctly registered, specially because folders to put the .AddIn file are a bit tricky, as I explained in the article &lt;a href="http://www.mztools.com/articles/2008/MZ2008001.aspx"&gt;INFO: Default .AddIn file locations for Visual Studio add-ins&lt;/a&gt; (COM-registration is also tricky, BTW). &lt;/p&gt;
&lt;p&gt;Using a file-monitoring tool like &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;Process Monitor&lt;/a&gt; revealed that Visual Studio actually found .AddIn files, so there was no registration problem.&lt;/p&gt;
&lt;p&gt;After almost one year with this problem unsolved, someone discovered yersterday the cause: a bad installation of MSXML 6.0, which apparently is used by Visual Studio to read the actual contents of the XML .AddIn files used by add-ins. After uninstalling MSXML 6.0 and installing the latest &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=d21c292c-368b-4ce1-9dab-3e9827b70604&amp;amp;displaylang=en"&gt;MSXML 6.0 SP1&lt;/a&gt; the problem was solved. Here is the whole discussion thread with the problem:&lt;/p&gt;
&lt;p&gt;VS 2008: Add-In Manager is empty&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/6778e3a2-2783-4826-a5f2-7089e1c8fb90"&gt;http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/6778e3a2-2783-4826-a5f2-7089e1c8fb90&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have updated my article:&lt;/p&gt;
&lt;p&gt;HOWTO: Troubleshooting Visual Studio and Office add-ins&lt;br /&gt;&lt;a href="http://www.mztools.com/articles/2007/MZ2007009.aspx"&gt;http://www.mztools.com/articles/2007/MZ2007009.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I would be nice if Visual Studio showed an error message rather than failing silently when parsing .AddIn files, and better yet, used the XML parser of the .NET framework rather that depending on an external component.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1653013" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of no ext_ConnectMode.ext_cm_UISetup phase fired, not even once</title><link>http://msmvps.com/blogs/carlosq/archive/2008/10/14/the-strange-case-of-no-ext-connectmode-ext-cm-uisetup-phase-fired-not-even-one.aspx</link><pubDate>Tue, 14 Oct 2008 10:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1650765</guid><dc:creator>carlosq</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1650765</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1650765</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/10/14/the-strange-case-of-no-ext-connectmode-ext-cm-uisetup-phase-fired-not-even-one.aspx#comments</comments><description>&lt;p&gt;Continuing today with some tests about the &lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/10/13/the-onconnection-method-and-ext-connectmode-ext-cm-uisetup-of-visual-studio-add-ins.aspx"&gt;The OnConnection method and ext_ConnectMode.ext_cm_UISetup of Visual Studio add-ins of my last post&lt;/a&gt;, I created a sample add-in using the code of the first sample (temporary UI) of my article &lt;a href="http://www.mztools.com/articles/2005/MZ2005003.aspx"&gt;HOWTO: Adding buttons, commandbars and toolbars to Visual Studio .NET from an add-in&lt;/a&gt;, and later I changed my mind to use the ext_ConnectMode.ext_cm_UISetup phase using the second sample. To my surprise, the ext_ConnectMode.ext_cm_UISetup phase was never fired, not even once, despite the fact that debugging the add-in should fire it each time because of the /resetaddin command-line flag in the Start Options of the Debug tab of the project properties window. &lt;/p&gt;
&lt;p&gt;Opening a command prompt window to use devenv.exe /resetaddin MyAddin.Connect caused no effect too. So, I started to get paranoid about the VS 2008 SP1 that I installed some weeks ago. Could it be possible that it broke the behavior somehow? Unfortunately no, the cause was other: in order to Visual Studio calls the OnConnection method of your add-in with the ext_ConnectMode.ext_cm_UISetup phase, your add-in registration must specify that it wants &amp;quot;CommandPreload&amp;quot;, a flag in the registry (COM registration) or tag in the .AddIn file (XML registration). Otherwise Visual Studio doesn&amp;#39;t bother to load add-ins that haven&amp;#39;t requested the ext_ConnectMode.ext_cm_UISetup phase. When you use the add-in wizard to create an add-in project, the page 4 of 6 has a checkbox:&lt;/p&gt;
&lt;p&gt; &amp;quot;Yes, create a &amp;quot;Tools&amp;quot; menu item. By default 
      this will cause the Add-in to load when the button is clicked unless the Add-in 
      is set to load on startup of the host application.&amp;quot;&lt;/p&gt;
&lt;p&gt;that you must check for the wizard to set that &amp;quot;CommandPreload&amp;quot; flag. I totally forgot this flag and it happens that since I always delete the whole code of the Connect class generated by the add-in wizard because I don&amp;#39;t like the code that it creates, most of the time I don&amp;#39;t bother to check that checkbox to delete less code... so, if you change your mind about whether you want ext_ConnectMode.ext_cm_UISetup phase or not in your add-in, it is not enough to change the code of your OnConnection method, you need to pay attention to that flag, either to get the ext_ConnectMode.ext_cm_UISetup phase, or to optimize your add-in preventing to load it for a phase that it won&amp;#39;t use...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1650765" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of "No such interface supported" (Error 80004002) loading a Visual Studio add-in</title><link>http://msmvps.com/blogs/carlosq/archive/2008/09/29/the-strange-case-of-quot-no-such-interface-supported-quot-error-80004002-loading-an-add-in.aspx</link><pubDate>Mon, 29 Sep 2008 13:02:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1649151</guid><dc:creator>carlosq</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1649151</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1649151</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/09/29/the-strange-case-of-quot-no-such-interface-supported-quot-error-80004002-loading-an-add-in.aspx#comments</comments><description>Some days ago I received an angry complaint from a prospect of the trial version of my MZ-Tools add-in, who uninstalled it because, somehow, he didn&amp;#39;t want the add-in loaded at startup during the evaluation period but he wanted to load it manually...(&lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/09/29/the-strange-case-of-quot-no-such-interface-supported-quot-error-80004002-loading-an-add-in.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1649151" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of System.BadImageFormatException: Could not load file or assembly 'Microsoft.mshtml'</title><link>http://msmvps.com/blogs/carlosq/archive/2008/07/23/the-strange-case-of-system-badimageformatexception-could-not-load-file-or-assembly-microsoft-mshtml.aspx</link><pubDate>Wed, 23 Jul 2008 07:16:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641839</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1641839</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1641839</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/07/23/the-strange-case-of-system-badimageformatexception-could-not-load-file-or-assembly-microsoft-mshtml.aspx#comments</comments><description>A couple of days ago another customer of my MZ-Tools add-in reported this exception: &amp;quot;System.BadImageFormatException: Could not load file or assembly &amp;#39;Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;#39;...(&lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/07/23/the-strange-case-of-system-badimageformatexception-could-not-load-file-or-assembly-microsoft-mshtml.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641839" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of Package 'Visual Studio Explorers and Designers Package' has failed to load properly</title><link>http://msmvps.com/blogs/carlosq/archive/2008/06/13/the-strange-case-of-package-visual-studio-explorers-and-designers-package-has-failed-to-load-properly.aspx</link><pubDate>Fri, 13 Jun 2008 08:05:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1634677</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1634677</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1634677</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/06/13/the-strange-case-of-package-visual-studio-explorers-and-designers-package-has-failed-to-load-properly.aspx#comments</comments><description>I was getting the error &amp;quot;Package &amp;#39;Visual Studio Explorers and Designers Package&amp;#39; has failed to load properly&amp;quot; when working with add-ins in VS 2008 since a couple of days ago, along with &amp;quot;COM object that has been separated from its...(&lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/06/13/the-strange-case-of-package-visual-studio-explorers-and-designers-package-has-failed-to-load-properly.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1634677" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of InvalidCastException using EditPoint.FindPattern with Visual Studio Database Projects</title><link>http://msmvps.com/blogs/carlosq/archive/2008/06/08/the-strange-case-of-invalidcastexception-using-editpoint-findpattern-with-visual-studio-database-projects.aspx</link><pubDate>Sun, 08 Jun 2008 21:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1633004</guid><dc:creator>carlosq</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1633004</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1633004</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/06/08/the-strange-case-of-invalidcastexception-using-editpoint-findpattern-with-visual-studio-database-projects.aspx#comments</comments><description>Many months ago I reported to Microsoft through Microsoft Connect an InvalidCastException that happened when using the EditPoint.FindPattern with .sql files of a database project of Visual Studio 2008 Team Suite (or VS 2008 Edition for DB Professionals...(&lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/06/08/the-strange-case-of-invalidcastexception-using-editpoint-findpattern-with-visual-studio-database-projects.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1633004" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item><item><title>The strange case of System.UnauthorizedAccessException when registering a Visual Studio add-in for COM Interop</title><link>http://msmvps.com/blogs/carlosq/archive/2008/05/22/the-strange-case-of-system-unauthorizedaccessexception-when-registering-a-visual-studio-add-in-for-com-interop.aspx</link><pubDate>Thu, 22 May 2008 08:03:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1625887</guid><dc:creator>carlosq</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/rsscomments.aspx?PostID=1625887</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/carlosq/commentapi.aspx?PostID=1625887</wfw:comment><comments>http://msmvps.com/blogs/carlosq/archive/2008/05/22/the-strange-case-of-system-unauthorizedaccessexception-when-registering-a-visual-studio-add-in-for-com-interop.aspx#comments</comments><description>Today I received a bug report for a new customer of my MZ-Tools add-in for Visual Studio (who purchased directly the product without trying the trial version) and the first thing that he encountered when running the setup was: System.UnauthorizedAccessException...(&lt;a href="http://msmvps.com/blogs/carlosq/archive/2008/05/22/the-strange-case-of-system-unauthorizedaccessexception-when-registering-a-visual-studio-add-in-for-com-interop.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1625887" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/carlosq/archive/tags/The+strange+case+of_2E00__2E00__2E00_/default.aspx">The strange case of...</category></item></channel></rss>