<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic How does EG tell which DLL file to load for an add-in? in SAS Enterprise Guide</title>
    <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127801#M10536</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This may appear to be an odd question, but it comes from experimenting with multiple versions of the effectively the same add-in written in VB.NET.&amp;nbsp; I've tried several different ways to distinguish between versions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Different file names and task names, but the content in the different DLL files is the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;LI&gt;Different file names, task names and ClassId/GUIDs, but the rest of the content the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;LI&gt;Different file names, task names, ClassId/GUIDs and version numbers, but the rest of the content the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;LI&gt;Different file names, task names, ClassId/GUIDs, version numbers and namespaces, but the rest of the content the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How do you create similar custom tasks with similar contents that appear as different add-in menu items?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;.........Phil&lt;/P&gt;&lt;P&gt;ee&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 15 Nov 2012 20:35:52 GMT</pubDate>
    <dc:creator>prholland</dc:creator>
    <dc:date>2012-11-15T20:35:52Z</dc:date>
    <item>
      <title>How does EG tell which DLL file to load for an add-in?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127801#M10536</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This may appear to be an odd question, but it comes from experimenting with multiple versions of the effectively the same add-in written in VB.NET.&amp;nbsp; I've tried several different ways to distinguish between versions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Different file names and task names, but the content in the different DLL files is the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;LI&gt;Different file names, task names and ClassId/GUIDs, but the rest of the content the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;LI&gt;Different file names, task names, ClassId/GUIDs and version numbers, but the rest of the content the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;LI&gt;Different file names, task names, ClassId/GUIDs, version numbers and namespaces, but the rest of the content the same = EG loads the DLL with the "earlier" name, i.e. TaskA.dll, not TaskB.dll!&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How do you create similar custom tasks with similar contents that appear as different add-in menu items?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;.........Phil&lt;/P&gt;&lt;P&gt;ee&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Nov 2012 20:35:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127801#M10536</guid>
      <dc:creator>prholland</dc:creator>
      <dc:date>2012-11-15T20:35:52Z</dc:date>
    </item>
    <item>
      <title>Re: How does EG tell which DLL file to load for an add-in?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127802#M10537</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Phil,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It depends on how you've registered the task.&amp;nbsp; If you can, I advise the "drop-in" deployment where you simply put the DLL(s) in one of the designated Custom folders.&amp;nbsp; Example locations for EG 4.3:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%appdata%\SAS\EnterpriseGuide\4.3\Custom&lt;/P&gt;&lt;P&gt;PROGRAMFILES\SASHome\x86\SASEnterpriseGuide\4.3\Custom&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you use the Add-In Manager to register the task, then that entry stays in place until you remove it or otherwise update it, even if you change the file contents (such as ClassID or task name).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The ClassID is &lt;STRONG&gt;THE&lt;/STRONG&gt; unique piece that distinguishes one task from another, so if you have any tasks that contain duplicate ClassIDs, all but one will be obscured.&amp;nbsp; Which one that is a bit of a chance -- falling to method of registration or alphabetical ordering of the DLL names.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you want to see what's going on in the task discovery/loading, turn on the extra logging feature in EG.&amp;nbsp; The log produced is meant for SAS tech support and developers to help diagnose issues, but you should be able to glean some information this way.&amp;nbsp; &lt;A href="http://support.sas.com/kb/17/730.html"&gt;This SAS note tells you how to enable it&lt;/A&gt; and where you can find the log files.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Example excerpt from such a log:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;2012-11-01 16:36:33,499 [Main] INFO&amp;nbsp; SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Loading custom task assembly: C:\Users\sascrh\AppData\Roaming\SAS\EnterpriseGuide\4.3\Custom\SAS.Tasks.SGDesigner.dll&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;2012-11-01 16:36:33,505 [Main] DEBUG SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Loaded assembly C:\Users\sascrh\AppData\Roaming\SAS\EnterpriseGuide\4.3\Custom\SAS.Tasks.SGDesigner.dll&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;2012-11-01 16:36:33,507 [Main] INFO&amp;nbsp; SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Successfully loaded custom task assembly: SAS.Tasks.SGDesigner, Version=4.3.0.0, Culture=neutral, PublicKeyToken=be58efc3b934219b&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;2012-11-01 16:36:33,510 [Main] INFO&amp;nbsp; SAS.Shared.AddIns.Management.AddInProxy [(null)] - Creating AddInProxy for SAS.Tasks.SGDesigner.CreateSampleDataTask, C:\Users\sascrh\AppData\Roaming\SAS\EnterpriseGuide\4.3\Custom\SAS.Tasks.SGDesigner.dll&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;2012-11-01 16:36:33,529 [Main] INFO&amp;nbsp; SAS.Shared.AddIns.Management.AddInProxy [(null)] - Creating AddInProxy for SAS.Tasks.SGDesigner.SGDesignerReplay, C:\Users\sascrh\AppData\Roaming\SAS\EnterpriseGuide\4.3\Custom\SAS.Tasks.SGDesigner.dll&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; font-size: 8pt;"&gt;2012-11-01 16:36:33,542 [Main] INFO&amp;nbsp; SAS.Shared.AddIns.Management.AddInProxy [(null)] - Creating AddInProxy for SAS.Tasks.SGDesigner.LaunchSGDesignerTask, C:\Users\sascrh\AppData\Roaming\SAS\EnterpriseGuide\4.3\Custom\SAS.Tasks.SGDesigner.dll&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Nov 2012 20:53:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127802#M10537</guid>
      <dc:creator>ChrisHemedinger</dc:creator>
      <dc:date>2012-11-15T20:53:17Z</dc:date>
    </item>
    <item>
      <title>Re: How does EG tell which DLL file to load for an add-in?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127803#M10538</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Chris,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't think my add-ins are exposing their PublicKeyToken:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;* 2012-11-15 21:26:08,669 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Loading custom task assembly: C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\&lt;STRONG&gt;DataGridViewer_Aaaaa.dll&lt;/STRONG&gt;&lt;BR /&gt;* 2012-11-15 21:26:08,269 [Main] DEBUG&lt;BR /&gt;SAS.EG.MainForm [(null)] - AddInRegistry.ConstructAddInRegistry() - Creating add in task registry.&lt;BR /&gt;* 2012-11-15 21:26:08,269 [Main] DEBUG&lt;BR /&gt;SAS.EG.MainForm [(null)] - AddInRegistry.ConstructAddInRegistry() - loading add in task.&lt;BR /&gt;* 2012-11-15 21:26:08,669 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Loading custom task assembly: C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\DataGridViewer_Aaaaa.dll&lt;BR /&gt;* 2012-11-15 21:26:08,730 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Loaded assembly C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\DataGridViewer_Aaaaa.dll&lt;BR /&gt;* 2012-11-15 21:26:09,046 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Successfully loaded custom task assembly: DataGridViewer_Aaaaa, Version=1.0.0.12111, Culture=neutral, PublicKeyToken=null&lt;BR /&gt;* 2012-11-15 21:26:09,062 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInProxy [(null)] - Creating AddInProxy for DataGridViewer.DataGridViewer, C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\DataGridViewer_Aaaaa.dll&lt;BR /&gt;* 2012-11-15 21:26:09,102 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Asked to resolve location for DataGridViewer_Aaaaa.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null&lt;BR /&gt;* 2012-11-15 21:26:09,102 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - DataGridViewer_Aaaaa.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null is not handled in ResolveAssembly&lt;BR /&gt;* 2012-11-15 21:26:09,102 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Asked to resolve location for DataGridViewer_Aaaaa.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null&lt;BR /&gt;* 2012-11-15 21:26:09,102 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - DataGridViewer_Aaaaa.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null is not handled in ResolveAssembly&lt;/PRE&gt;&lt;PRE&gt;* 2012-11-15 21:26:09,166 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Loading custom task assembly: C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\&lt;STRONG&gt;DataGridViewer_HNL.dll&lt;/STRONG&gt;&lt;BR /&gt;* 2012-11-15 21:26:09,184 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Loaded assembly C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\DataGridViewer_HNL.dll&lt;BR /&gt;* 2012-11-15 21:26:09,185 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInRegistry [(null)] - Successfully loaded custom task assembly: DataGridViewer_HNL, Version=1.0.0.12111, Culture=neutral, PublicKeyToken=null&lt;BR /&gt;* 2012-11-15 21:26:09,187 [Main] INFO&lt;BR /&gt;SAS.Shared.AddIns.Management.AddInProxy [(null)] - Creating AddInProxy for DataGridViewer_HNL.DataGridViewer, C:\Users\Phil\AppData\Roaming\SAS\EnterpriseGuide\5.1\Custom\DataGridViewer_HNL.dll&lt;BR /&gt;* 2012-11-15 21:26:09,189 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Asked to resolve location for DataGridViewer_HNL.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null&lt;BR /&gt;* 2012-11-15 21:26:09,189 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - DataGridViewer_HNL.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null is not handled in ResolveAssembly&lt;BR /&gt;* 2012-11-15 21:26:09,189 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - Asked to resolve location for DataGridViewer_HNL.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null&lt;BR /&gt;* 2012-11-15 21:26:09,189 [Main] DEBUG&lt;BR /&gt;SAS.EG.Utilities.AppDomainAssemblyResolver [(null)] - DataGridViewer_HNL.resources, Version=1.0.0.12111, Culture=en, PublicKeyToken=null is not handled in ResolveAssembly&lt;/PRE&gt;&lt;P&gt;I think I need to look at my VB.NET settings.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks..............Phil&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Nov 2012 22:02:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127803#M10538</guid>
      <dc:creator>prholland</dc:creator>
      <dc:date>2012-11-15T22:02:45Z</dc:date>
    </item>
    <item>
      <title>Re: How does EG tell which DLL file to load for an add-in?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127804#M10539</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Phil,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PublicKey doesn't play into it, I don't think.&amp;nbsp; It's not a requirement for custom tasks.&amp;nbsp; It comes into play only if you sign your task assemblies with a .NET strong name.&amp;nbsp; We do this for our SAS-provided DLLs, but you don't have to.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It looks like, from the log, that your two tasks are loaded and "add-in proxies" are created for:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DataGridViewer.DataGridViewer&lt;/P&gt;&lt;P&gt; and &lt;/P&gt;&lt;P&gt;DataGridViewer_HNL.DataGridViewer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So...that's a good start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Nov 2012 22:31:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127804#M10539</guid>
      <dc:creator>ChrisHemedinger</dc:creator>
      <dc:date>2012-11-15T22:31:14Z</dc:date>
    </item>
    <item>
      <title>Re: How does EG tell which DLL file to load for an add-in?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127805#M10540</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Chris,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've finally seen where the problem is, as the ClassId and GUID values are different within each task, but the ClassId values are the same for both tasks:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;DataGridViewer_Aaaaa = 2e9b68d0-d343-49de-8d6c-4e00da3e062f (ClassId in DataGridViewer.vb) / 5021c8c6-4f74-423b-9761-91aa4279db92 (GUID in AssembyInfo.vb)&lt;/LI&gt;&lt;LI&gt;DataGridViewer_HNL = 2e9b68d0-d343-49de-8d6c-4e00da3e062f (ClassId in DataGridViewer.vb) / 89fd058e-38ea-4316-b88e-98369e432d1c (GUID in AssembyInfo.vb)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I thought ClassId changed whenever I updated GUID, but, obviously, it doesn't!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Many thanks............Phil&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 16 Nov 2012 09:11:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127805#M10540</guid>
      <dc:creator>prholland</dc:creator>
      <dc:date>2012-11-16T09:11:08Z</dc:date>
    </item>
    <item>
      <title>Re: How does EG tell which DLL file to load for an add-in?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127806#M10541</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Phil,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That GUID that you see in the AssemblyInfo file is generated by Visual Studio as a unique ID for your project library, and I think it would be used only if the code library you write ends up exposed as a COM object with a type library.&amp;nbsp; That isn't the scenario for a custom task.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;GUIDs (or ClassIDs or UUIDs) &lt;A href="http://blogs.sas.com/content/sasdummy/2012/10/19/creating-a-somewhat-unique-id-using-the-uuidgen-function/"&gt;are used for lots of different purposes in software development and elsewhere&lt;/A&gt;.&amp;nbsp; The only one that matters to the custom task (add-in) API is the one you assign to the ClassId property in your task class.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 16 Nov 2012 13:45:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-does-EG-tell-which-DLL-file-to-load-for-an-add-in/m-p/127806#M10541</guid>
      <dc:creator>ChrisHemedinger</dc:creator>
      <dc:date>2012-11-16T13:45:45Z</dc:date>
    </item>
  </channel>
</rss>

