[mapguide-commits] r7122 - in trunk/Tools/Maestro: . Maestro OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI.Http/Properties OSGeo.MapGuide.MaestroAPI.Local OSGeo.MapGuide.MaestroAPI.Local/Properties OSGeo.MapGuide.MaestroAPI.Native OSGeo.MapGuide.MaestroAPI.Native/Properties ProviderTemplate ProviderTemplate/Properties ProviderTemplate/Resources SDK SignMapGuideApi

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Oct 16 09:30:37 PDT 2012


Author: jng
Date: 2012-10-16 09:30:36 -0700 (Tue, 16 Oct 2012)
New Revision: 7122

Added:
   trunk/Tools/Maestro/ProviderTemplate/
   trunk/Tools/Maestro/ProviderTemplate/App.config
   trunk/Tools/Maestro/ProviderTemplate/Form1.Designer.cs
   trunk/Tools/Maestro/ProviderTemplate/Form1.cs
   trunk/Tools/Maestro/ProviderTemplate/Form1.resx
   trunk/Tools/Maestro/ProviderTemplate/Program.cs
   trunk/Tools/Maestro/ProviderTemplate/Properties/
   trunk/Tools/Maestro/ProviderTemplate/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.resx
   trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.Designer.cs
   trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.settings
   trunk/Tools/Maestro/ProviderTemplate/ProviderTemplate.csproj
   trunk/Tools/Maestro/ProviderTemplate/Resources/
   trunk/Tools/Maestro/ProviderTemplate/Resources/AssemblyInfo.txt
   trunk/Tools/Maestro/ProviderTemplate/readme.txt
Modified:
   trunk/Tools/Maestro/Maestro/Maestro_All.sln
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/OSGeo.MapGuide.MaestroAPI.Local.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native32-2.2.0.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ConnectionProviderRegistry.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/MaestroApiProviderAttribute.cs
   trunk/Tools/Maestro/SDK/
   trunk/Tools/Maestro/SignMapGuideApi/SignMapGuideApi.csproj
Log:
This submission includes the following changes:
 - #2151: Add new APIs to ConnectionProviderRegistry to be able to programmatically determine if a provider is single-instance
 - #2138: Add a first cut of the LocalNative provider build tool. This has been tested with the MGOS 2.2 and MGOS 2.4 assemblies, and builds without issues (whether the provider assembly works as expected is still yet to be determined)

Modified: trunk/Tools/Maestro/Maestro/Maestro_All.sln
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro_All.sln	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/Maestro/Maestro_All.sln	2012-10-16 16:30:36 UTC (rev 7122)
@@ -143,200 +143,407 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro.LiveMapEditor", "..\Maestro.LiveMapEditor\Maestro.LiveMapEditor.csproj", "{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProviderTemplate", "..\ProviderTemplate\ProviderTemplate.csproj", "{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B3A2B816-9F41-4857-A111-09D2DF2550D6} = {B3A2B816-9F41-4857-A111-09D2DF2550D6}
+		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC} = {D24F724A-1CBF-4EB6-A48B-92C08353C4CC}
+		{F4420153-9DF3-4407-AD65-E8ABED2B6E25} = {F4420153-9DF3-4407-AD65-E8ABED2B6E25}
+		{80FA3158-8B5F-48D1-A393-0378AFE48A7E} = {80FA3158-8B5F-48D1-A393-0378AFE48A7E}
+		{6EF1E775-444B-4E5F-87FB-D687C43A68D7} = {6EF1E775-444B-4E5F-87FB-D687C43A68D7}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
 		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.Build.0 = Release|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{59BE5E18-17B6-431D-836E-C0AABA6D69E8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Release|Any CPU.Build.0 = Release|Any CPU
+		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{32BA7DF6-1AFA-441D-9231-5624C5920706}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C7DCF771-5982-4859-A17F-01126E6F9BA6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{0EA33E36-9C33-4D60-B378-B87FADAA0F40}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{CFD19053-2172-41D3-8460-0FD2123A1E88}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{80FA3158-8B5F-48D1-A393-0378AFE48A7E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{6EF1E775-444B-4E5F-87FB-D687C43A68D7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{B5EA049C-6AB7-4686-A2F4-4BA2EAC0E585}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{EDDB0F74-6FE7-4969-80B0-817A629722CD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{AC5068F6-CFBE-4BCD-B68B-062725E424D4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{B2A1F69E-52AA-42A2-8DED-89ADB9B14A38}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{D525B343-66D6-4D6B-9A55-78A173D94A51}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{BF6E996E-27AF-44CD-B3CF-A40874E15B2E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{0A93ACA8-5B21-44E6-B0B7-5D1E72D3A6A2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{E73BB233-D88B-44A7-A98F-D71EE158381D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Release|Any CPU.Build.0 = Release|Any CPU
+		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{351D49A3-2E4A-4EC3-AFC2-D56598F44F51}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{50C12B5C-387C-4007-A1D1-CB181CB474CC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{F976A709-D9DB-407E-A4CD-2CEA31C6B1D9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C8DB3E77-3AF4-471D-A214-69DBEB32750E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{F84E21EE-360C-46EC-BD01-E66F8D9F5B3E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{B3A2B816-9F41-4857-A111-09D2DF2550D6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{3DDF6501-0148-474C-8674-7C7DA49C7F02}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2419F940-BFB7-4F3F-B5DA-1052EB4706E5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{6EE16FFD-296E-42FF-B994-8902C27AA0F4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{D24F724A-1CBF-4EB6-A48B-92C08353C4CC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{BEC17FD3-2ADB-4154-934D-494313C588EE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Release|Any CPU.Build.0 = Release|Any CPU
+		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{16E6B250-C805-4C31-9A7D-F56A0051EC93}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C0CA5D05-72C0-4F22-8618-B31BF0FFA190}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{222CB020-5336-47D7-9BB9-A22D18953C80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{222CB020-5336-47D7-9BB9-A22D18953C80}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{222CB020-5336-47D7-9BB9-A22D18953C80}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{222CB020-5336-47D7-9BB9-A22D18953C80}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{222CB020-5336-47D7-9BB9-A22D18953C80}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{222CB020-5336-47D7-9BB9-A22D18953C80}.Release|Any CPU.Build.0 = Release|Any CPU
+		{222CB020-5336-47D7-9BB9-A22D18953C80}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{222CB020-5336-47D7-9BB9-A22D18953C80}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{E367FE8E-E46F-4DA0-86CE-E6F37E78DEE0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{3591C5BB-2B87-4FB4-AD87-9C8176DF9835}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
 		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{4F9658DE-D16F-4B40-B830-BB1E0136DBD7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Debug|Any CPU.Build.0 = Debug|x86
+		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Debug|Mixed Platforms.Build.0 = Debug|x86
 		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Release|Any CPU.ActiveCfg = Release|x86
 		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Release|Any CPU.Build.0 = Release|x86
+		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{F1EDEB83-D09F-46E0-B655-B43D4D9682DD}.Release|Mixed Platforms.Build.0 = Release|x86
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ConnectionProviderRegistry.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ConnectionProviderRegistry.cs	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ConnectionProviderRegistry.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -49,6 +49,12 @@
         /// 	<c>true</c> if this instance is multi platform; otherwise, <c>false</c>.
         /// </value>
         public bool IsMultiPlatform { get; private set; }
+        /// <summary>
+        /// Gets whether this provider has global connection state. This effectively indicates that subsequent connections after the first one
+        /// created for this provider will re-use the same connection information and may/will disregard that values of the connection parameters
+        /// you pass in
+        /// </summary>
+        public bool HasGlobalState { get; private set; }
 
         /// <summary>
         /// Initializes a new instance of the <see cref="ConnectionProviderEntry"/> class.
@@ -126,6 +132,7 @@
 
         static Dictionary<string, ConnectionFactoryMethod> _ctors;
         static List<ConnectionProviderEntry> _providers;
+        static Dictionary<string, int> _callCount;
 
         static string _dllRoot;
 
@@ -133,6 +140,7 @@
         {
             _ctors = new Dictionary<string, ConnectionFactoryMethod>();
             _providers = new List<ConnectionProviderEntry>();
+            _callCount = new Dictionary<string, int>();
 
             var dir = System.IO.Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
             var path = System.IO.Path.Combine(dir, PROVIDER_CONFIG);
@@ -168,7 +176,8 @@
                             IServerConnection conn = (IServerConnection)impl.InvokeMember(null, flags, null, null, new object[] { initParams });
                             return conn;
                         });
-                        _providers.Add(new ConnectionProviderEntry(name, desc, attr[0].IsMultiPlatform));    
+                        _providers.Add(new ConnectionProviderEntry(name, desc, attr[0].IsMultiPlatform));
+                        _callCount[name] = 0;
                     }
                 }
                 catch
@@ -202,6 +211,24 @@
         }
 
         /// <summary>
+        /// Gets the invocation count for the given provider (the number of times a connection has been created for that provider)
+        /// </summary>
+        /// <remarks>
+        /// This (in conjunction with the <see cref="P:OSGeo.MapGuide.MaestroAPI.ConnectionProviderEntry.HasGlobalState"/> property) can
+        /// be used to programmatically determine if creating a connection for a given provider will respect the connection parameter values
+        /// you pass to it. (0 calls will respect your parameter values. 1 or more will not)
+        /// </remarks>
+        /// <param name="provider"></param>
+        /// <returns>The invocation count for the given provider. -1 if the provider is not registered or does not exist</returns>
+        public static int GetInvocationCount(string provider)
+        {
+            if (_callCount.ContainsKey(provider))
+                return _callCount[provider];
+
+            return -1;
+        }
+
+        /// <summary>
         /// Registers a new connection provider
         /// </summary>
         /// <param name="entry">The provider entry.</param>
@@ -221,6 +248,20 @@
         /// </summary>
         /// <param name="provider"></param>
         /// <param name="connectionString"></param>
+        /// <remarks>
+        /// The Maestro.Local provider (that wraps mg-desktop) and Maestro.LocalNative providers (that wraps the official MapGuide API)
+        /// are unique in that it has global connection state. What this means is that subsequent connections after the first one for 
+        /// these providers may re-use existing state for the first connection. The reason for this is that creating this connection 
+        /// internally calls MgdPlatform.Initialize(iniFile) and MapGuideApi.MgInitializeWebTier(iniFile) respectively, that initializes 
+        /// the necessary library parameters in the process space of your application. Creating another connection will call 
+        /// MgdPlatform.Initialize and MapGuideApi.MgInitializeWebTier again, but these methods are by-design only made to be called once 
+        /// as subsequent calls are returned immediately.
+        /// 
+        /// Basically, the connection parameters you pass in are for initializing the provider the first time round. Subsequent calls may not
+        /// (most likely will not) respect the values of your connection parameters. 
+        /// 
+        /// You can programmatically check this via the <see cref="P:OSGeo.MapGuide.MaestroAPI.ConnectionProviderEntry.HasGlobalState"/> property
+        /// </remarks>
         /// <returns></returns>
         public static IServerConnection CreateConnection(string provider, string connectionString)
         {
@@ -235,7 +276,9 @@
             ConnectionFactoryMethod method = _ctors[name];
 
             NameValueCollection initParams = ParseConnectionString(connectionString);
-            return method(initParams);
+            IServerConnection result = method(initParams);
+            _callCount[name]++;
+            return result;
         }
 
         /// <summary>
@@ -255,7 +298,9 @@
                 throw new NotSupportedException(string.Format(Strings.ErrorProviderNotUsableForYourPlatform, provider));
 
             var method = _ctors[name];
-            return method(connInitParams);
+            IServerConnection result = method(connInitParams);
+            _callCount[name]++;
+            return result;
         }
 
         /// <summary>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/MaestroApiProviderAttribute.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/MaestroApiProviderAttribute.cs	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/MaestroApiProviderAttribute.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -36,12 +36,14 @@
         /// <param name="description">The description.</param>
         /// <param name="implType">Type of the impl.</param>
         /// <param name="multiPlatform">if set to <c>true</c> [multi platform].</param>
-        public MaestroApiProviderAttribute(string name, string description, Type implType, bool multiPlatform)
+        /// <param name="bHasGlobalState">Whether this provider has global connection state</param>
+        public MaestroApiProviderAttribute(string name, string description, Type implType, bool multiPlatform, bool bHasGlobalState)
         {
             this.Name = name;
             this.Description = description;
             this.ImplType = implType;
             this.IsMultiPlatform = multiPlatform;
+            this.HasGlobalState = bHasGlobalState;
         }
 
         /// <summary>
@@ -60,6 +62,13 @@
         public bool IsMultiPlatform { get; set; }
 
         /// <summary>
+        /// Indicates whether this provider contains global connection-specific state. For such providers, connections are effectively
+        /// single-instance. This is corner-case property required by a particular provider (Maestro.Local), but may extend to other providers
+        /// in the future
+        /// </summary>
+        public bool HasGlobalState { get; set; }
+
+        /// <summary>
         /// The type that implements our main server connection interface
         /// </summary>
         public Type ImplType { get; set; }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/Properties/AssemblyInfo.cs	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/Properties/AssemblyInfo.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -24,4 +24,4 @@
 [assembly: InternalsVisibleTo("MaestroAPITests, PublicKey=00240000048000009400000006020000002400005253413100040000010001000f196e7ed5bff1e511efa3251b228582b26cbf78ea6d4282742d5c882db02b08ebc99922c0ddccf9ab79ee180250ac6716f986cf6fabdc1404b3dafee8873d4d6327be301f5ca52862065678cd5bc0c18ddc7ef6516723162c985a0c20eec07382a2090486f24393bf80976aa5ab57274620bafd62dfec34d5eed74bf41e72d2")]
 [assembly: InternalsVisibleTo("MaestroBaseTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001000f196e7ed5bff1e511efa3251b228582b26cbf78ea6d4282742d5c882db02b08ebc99922c0ddccf9ab79ee180250ac6716f986cf6fabdc1404b3dafee8873d4d6327be301f5ca52862065678cd5bc0c18ddc7ef6516723162c985a0c20eec07382a2090486f24393bf80976aa5ab57274620bafd62dfec34d5eed74bf41e72d2")]
 
-[assembly: MaestroApiProvider("Maestro.Http", "Maestro HTTP API", typeof(HttpServerConnection), true)]
\ No newline at end of file
+[assembly: MaestroApiProvider("Maestro.Http", "Maestro HTTP API", typeof(HttpServerConnection), true, false)]
\ No newline at end of file

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/OSGeo.MapGuide.MaestroAPI.Local.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/OSGeo.MapGuide.MaestroAPI.Local.csproj	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/OSGeo.MapGuide.MaestroAPI.Local.csproj	2012-10-16 16:30:36 UTC (rev 7122)
@@ -38,7 +38,7 @@
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
-    <OutputPath>..\SDK\bin\</OutputPath>
+    <OutputPath>bin\Debug\</OutputPath>
     <DefineConstants>TRACE;DEBUG;LOCAL_API</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/Properties/AssemblyInfo.cs	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Local/Properties/AssemblyInfo.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -21,4 +21,4 @@
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 [assembly: Guid("1a33e84e-0180-4b3f-bae5-51b1a62f6bd1")]
 
-[assembly: MaestroApiProvider("Maestro.Local", "Maestro connection wrapper for mg-desktop library", typeof(LocalConnection), true)]
\ No newline at end of file
+[assembly: MaestroApiProvider("Maestro.Local", "Maestro connection wrapper for mg-desktop library", typeof(LocalConnection), true, true)]
\ No newline at end of file

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -438,6 +438,8 @@
             OnResourceDeleted(resourceID);
 		}
 
+        private Version m_siteVersion;
+
 		public override Version SiteVersion
 		{
 			get
@@ -473,15 +475,16 @@
                         }
                     }
                 }
-                catch
+                catch (MgException ex)
                 {
+                    string msg = ex.Message;
+                    ex.Dispose();
+                    throw new MaestroException(ex.Message);
                 }
 
-                //Default
                 if (m_siteVersion == null)
-                {
-                    m_siteVersion = SiteVersions.GetVersion(KnownSiteVersions.MapGuideOS1_2);
-                }
+                    throw new MaestroException("Could not determine MapGuide API version");
+
                 return m_siteVersion;
 #endif
             }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native32-2.2.0.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native32-2.2.0.csproj	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native32-2.2.0.csproj	2012-10-16 16:30:36 UTC (rev 7122)
@@ -41,20 +41,23 @@
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
-    <OutputPath>..\SDK\bin\bin.x86.MGOS2.2.0\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;MG220</DefineConstants>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
-    <OutputPath>..\SDK\bin\bin.x86.MGOS2.2.0\</OutputPath>
-    <DefineConstants>TRACE;MG220</DefineConstants>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <PlatformTarget>x86</PlatformTarget>
   </PropertyGroup>
+  <PropertyGroup>
+    <RunPostBuildEvent>Always</RunPostBuildEvent>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="NetTopologySuite.Merged, Version=1.8.0.0, Culture=neutral, PublicKeyToken=f580a05016ebada1, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -140,6 +143,10 @@
     </BootstrapperPackage>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>xcopy /Y /I "$(ProjectDir)*.cs" "$(SolutionDir)..\SDK\LocalNativeProvider\Src\"
+xcopy /Y /I "$(ProjectDir)Commands\*.cs" "$(SolutionDir)..\SDK\LocalNativeProvider\Src\Commands\"</PostBuildEvent>
+  </PropertyGroup>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -40,8 +40,4 @@
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 [assembly: Guid("D80991DF-E4D3-43ee-AF2B-C96AD8462C70")]
 
-// This long string is the public key of the maestroapi.key token
-[assembly: InternalsVisibleTo("MaestroAPITests, PublicKey=00240000048000009400000006020000002400005253413100040000010001000f196e7ed5bff1e511efa3251b228582b26cbf78ea6d4282742d5c882db02b08ebc99922c0ddccf9ab79ee180250ac6716f986cf6fabdc1404b3dafee8873d4d6327be301f5ca52862065678cd5bc0c18ddc7ef6516723162c985a0c20eec07382a2090486f24393bf80976aa5ab57274620bafd62dfec34d5eed74bf41e72d2")]
-[assembly: InternalsVisibleTo("MaestroBaseTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001000f196e7ed5bff1e511efa3251b228582b26cbf78ea6d4282742d5c882db02b08ebc99922c0ddccf9ab79ee180250ac6716f986cf6fabdc1404b3dafee8873d4d6327be301f5ca52862065678cd5bc0c18ddc7ef6516723162c985a0c20eec07382a2090486f24393bf80976aa5ab57274620bafd62dfec34d5eed74bf41e72d2")]
-
-[assembly: MaestroApiProvider("Maestro.LocalNative", "Maestro wrapper for official MapGuide API", typeof(LocalNativeConnection), true)]
\ No newline at end of file
+[assembly: MaestroApiProvider("Maestro.LocalNative", "Maestro wrapper for official MapGuide API", typeof(LocalNativeConnection), true, true)]
\ No newline at end of file


Property changes on: trunk/Tools/Maestro/ProviderTemplate
___________________________________________________________________
Added: svn:ignore
   + bin
obj
ProviderTemplate.csproj.user


Added: trunk/Tools/Maestro/ProviderTemplate/App.config
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/App.config	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/App.config	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+</configuration>
\ No newline at end of file

Added: trunk/Tools/Maestro/ProviderTemplate/Form1.Designer.cs
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Form1.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Form1.Designer.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,313 @@
+namespace ProviderTemplate
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.txtMgDir = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtFxDir = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.txtTestOutputDir = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.btnFxDir = new System.Windows.Forms.Button();
+            this.btnMgDir = new System.Windows.Forms.Button();
+            this.btnTestDir = new System.Windows.Forms.Button();
+            this.chkUnitTests = new System.Windows.Forms.CheckBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.rdPost22 = new System.Windows.Forms.RadioButton();
+            this.rdPre22 = new System.Windows.Forms.RadioButton();
+            this.grpUnitTests = new System.Windows.Forms.GroupBox();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.txtMessages = new System.Windows.Forms.TextBox();
+            this.btnBuild = new System.Windows.Forms.Button();
+            this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
+            this.worker = new System.ComponentModel.BackgroundWorker();
+            this.txtMgVersion = new System.Windows.Forms.TextBox();
+            this.grpUnitTests.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // txtMgDir
+            // 
+            this.txtMgDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtMgDir.Location = new System.Drawing.Point(12, 71);
+            this.txtMgDir.Name = "txtMgDir";
+            this.txtMgDir.Size = new System.Drawing.Size(522, 20);
+            this.txtMgDir.TabIndex = 3;
+            this.txtMgDir.Text = "C:\\Program Files\\OSGeo\\MapGuide\\Web\\www\\mapviewernet\\bin";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(9, 55);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(174, 13);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "MapGuide .net assemblies directory";
+            // 
+            // txtFxDir
+            // 
+            this.txtFxDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtFxDir.Location = new System.Drawing.Point(12, 28);
+            this.txtFxDir.Name = "txtFxDir";
+            this.txtFxDir.Size = new System.Drawing.Size(522, 20);
+            this.txtFxDir.TabIndex = 7;
+            this.txtFxDir.Text = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319";
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(9, 12);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(187, 13);
+            this.label4.TabIndex = 6;
+            this.label4.Text = ".net 4.0 Framework directory (csc.exe)";
+            // 
+            // txtTestOutputDir
+            // 
+            this.txtTestOutputDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtTestOutputDir.Location = new System.Drawing.Point(15, 41);
+            this.txtTestOutputDir.Name = "txtTestOutputDir";
+            this.txtTestOutputDir.Size = new System.Drawing.Size(489, 20);
+            this.txtTestOutputDir.TabIndex = 9;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(12, 25);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(104, 13);
+            this.label5.TabIndex = 8;
+            this.label5.Text = "Test output directory";
+            // 
+            // btnFxDir
+            // 
+            this.btnFxDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnFxDir.Location = new System.Drawing.Point(540, 26);
+            this.btnFxDir.Name = "btnFxDir";
+            this.btnFxDir.Size = new System.Drawing.Size(26, 23);
+            this.btnFxDir.TabIndex = 10;
+            this.btnFxDir.Text = "...";
+            this.btnFxDir.UseVisualStyleBackColor = true;
+            this.btnFxDir.Click += new System.EventHandler(this.btnFxDir_Click);
+            // 
+            // btnMgDir
+            // 
+            this.btnMgDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnMgDir.Location = new System.Drawing.Point(540, 70);
+            this.btnMgDir.Name = "btnMgDir";
+            this.btnMgDir.Size = new System.Drawing.Size(26, 23);
+            this.btnMgDir.TabIndex = 12;
+            this.btnMgDir.Text = "...";
+            this.btnMgDir.UseVisualStyleBackColor = true;
+            this.btnMgDir.Click += new System.EventHandler(this.btnMgDir_Click);
+            // 
+            // btnTestDir
+            // 
+            this.btnTestDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnTestDir.Location = new System.Drawing.Point(510, 39);
+            this.btnTestDir.Name = "btnTestDir";
+            this.btnTestDir.Size = new System.Drawing.Size(26, 23);
+            this.btnTestDir.TabIndex = 14;
+            this.btnTestDir.Text = "...";
+            this.btnTestDir.UseVisualStyleBackColor = true;
+            this.btnTestDir.Click += new System.EventHandler(this.btnTestDir_Click);
+            // 
+            // chkUnitTests
+            // 
+            this.chkUnitTests.AutoSize = true;
+            this.chkUnitTests.Location = new System.Drawing.Point(18, 162);
+            this.chkUnitTests.Name = "chkUnitTests";
+            this.chkUnitTests.Size = new System.Drawing.Size(100, 17);
+            this.chkUnitTests.TabIndex = 15;
+            this.chkUnitTests.Text = "Build Unit Tests";
+            this.chkUnitTests.UseVisualStyleBackColor = true;
+            this.chkUnitTests.CheckedChanged += new System.EventHandler(this.chkUnitTests_CheckedChanged);
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(9, 106);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(144, 13);
+            this.label6.TabIndex = 16;
+            this.label6.Text = "MapGuide API Version (x.y.z)";
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(9, 139);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(130, 13);
+            this.label7.TabIndex = 18;
+            this.label7.Text = "MapGuide Assembly Type";
+            // 
+            // rdPost22
+            // 
+            this.rdPost22.AutoSize = true;
+            this.rdPost22.Checked = true;
+            this.rdPost22.Location = new System.Drawing.Point(175, 139);
+            this.rdPost22.Name = "rdPost22";
+            this.rdPost22.Size = new System.Drawing.Size(196, 17);
+            this.rdPost22.TabIndex = 19;
+            this.rdPost22.TabStop = true;
+            this.rdPost22.Text = "2.2 and newer (OSGeo.MapGuide.*)";
+            this.rdPost22.UseVisualStyleBackColor = true;
+            // 
+            // rdPre22
+            // 
+            this.rdPre22.AutoSize = true;
+            this.rdPre22.Location = new System.Drawing.Point(377, 139);
+            this.rdPre22.Name = "rdPre22";
+            this.rdPre22.Size = new System.Drawing.Size(179, 17);
+            this.rdPre22.TabIndex = 20;
+            this.rdPre22.Text = "Pre-2.2 (MapGuideDotNetApi.dll)";
+            this.rdPre22.UseVisualStyleBackColor = true;
+            // 
+            // grpUnitTests
+            // 
+            this.grpUnitTests.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.grpUnitTests.Controls.Add(this.txtTestOutputDir);
+            this.grpUnitTests.Controls.Add(this.label5);
+            this.grpUnitTests.Controls.Add(this.btnTestDir);
+            this.grpUnitTests.Location = new System.Drawing.Point(12, 185);
+            this.grpUnitTests.Name = "grpUnitTests";
+            this.grpUnitTests.Size = new System.Drawing.Size(554, 77);
+            this.grpUnitTests.TabIndex = 21;
+            this.grpUnitTests.TabStop = false;
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox2.Controls.Add(this.txtMessages);
+            this.groupBox2.Location = new System.Drawing.Point(12, 268);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(554, 256);
+            this.groupBox2.TabIndex = 22;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "Messages";
+            // 
+            // txtMessages
+            // 
+            this.txtMessages.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.txtMessages.Location = new System.Drawing.Point(3, 16);
+            this.txtMessages.Multiline = true;
+            this.txtMessages.Name = "txtMessages";
+            this.txtMessages.ReadOnly = true;
+            this.txtMessages.ScrollBars = System.Windows.Forms.ScrollBars.Horizontal;
+            this.txtMessages.Size = new System.Drawing.Size(548, 237);
+            this.txtMessages.TabIndex = 0;
+            // 
+            // btnBuild
+            // 
+            this.btnBuild.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnBuild.Location = new System.Drawing.Point(491, 530);
+            this.btnBuild.Name = "btnBuild";
+            this.btnBuild.Size = new System.Drawing.Size(75, 23);
+            this.btnBuild.TabIndex = 23;
+            this.btnBuild.Text = "Build";
+            this.btnBuild.UseVisualStyleBackColor = true;
+            this.btnBuild.Click += new System.EventHandler(this.btnBuild_Click);
+            // 
+            // worker
+            // 
+            this.worker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.worker_DoWork);
+            this.worker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.worker_RunWorkerCompleted);
+            // 
+            // txtMgVersion
+            // 
+            this.txtMgVersion.Location = new System.Drawing.Point(175, 103);
+            this.txtMgVersion.Name = "txtMgVersion";
+            this.txtMgVersion.Size = new System.Drawing.Size(100, 20);
+            this.txtMgVersion.TabIndex = 24;
+            this.txtMgVersion.Text = "2.4.0";
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(578, 565);
+            this.Controls.Add(this.txtMgVersion);
+            this.Controls.Add(this.btnBuild);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.grpUnitTests);
+            this.Controls.Add(this.chkUnitTests);
+            this.Controls.Add(this.rdPre22);
+            this.Controls.Add(this.rdPost22);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.btnMgDir);
+            this.Controls.Add(this.btnFxDir);
+            this.Controls.Add(this.txtFxDir);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.txtMgDir);
+            this.Controls.Add(this.label2);
+            this.Name = "Form1";
+            this.Text = "Maestro LocalNative provider builder";
+            this.grpUnitTests.ResumeLayout(false);
+            this.grpUnitTests.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TextBox txtMgDir;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtFxDir;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox txtTestOutputDir;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Button btnFxDir;
+        private System.Windows.Forms.Button btnMgDir;
+        private System.Windows.Forms.Button btnTestDir;
+        private System.Windows.Forms.CheckBox chkUnitTests;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.RadioButton rdPost22;
+        private System.Windows.Forms.RadioButton rdPre22;
+        private System.Windows.Forms.GroupBox grpUnitTests;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.TextBox txtMessages;
+        private System.Windows.Forms.Button btnBuild;
+        private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
+        private System.ComponentModel.BackgroundWorker worker;
+        private System.Windows.Forms.TextBox txtMgVersion;
+    }
+}
+

Added: trunk/Tools/Maestro/ProviderTemplate/Form1.cs
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Form1.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Form1.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,243 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ProviderTemplate
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            grpUnitTests.Enabled = chkUnitTests.Checked;
+            base.OnLoad(e);
+        }
+
+        private void btnFxDir_Click(object sender, EventArgs e)
+        {
+            if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                txtFxDir.Text = folderBrowserDialog.SelectedPath;
+        }
+
+        private void btnMgDir_Click(object sender, EventArgs e)
+        {
+            if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                txtMgDir.Text = folderBrowserDialog.SelectedPath;
+        }
+
+        private void btnTestDir_Click(object sender, EventArgs e)
+        {
+            if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                txtTestOutputDir.Text = folderBrowserDialog.SelectedPath;
+        }
+
+        private void chkUnitTests_CheckedChanged(object sender, EventArgs e)
+        {
+            grpUnitTests.Enabled = chkUnitTests.Checked;
+        }
+
+        private void btnBuild_Click(object sender, EventArgs e)
+        {
+            btnBuild.Enabled = false;
+            worker.RunWorkerAsync(new BuildArgs() { 
+                FxDir = txtFxDir.Text,
+                MgDir = txtMgDir.Text,
+                MgVersion = txtMgVersion.Text,
+                RefMapGuideDotNetApi = rdPre22.Checked,
+                BuildUnitTests = chkUnitTests.Checked,
+                TestDir = txtTestOutputDir.Text
+            });
+        }
+
+        private void AppendMessage(string msg)
+        {
+            Action action = () =>
+            {
+                txtMessages.AppendText(msg + Environment.NewLine);
+            };
+            txtMessages.BeginInvoke(action);
+        }
+
+        class BuildArgs
+        {
+            public string FxDir;
+            public string MgDir;
+            public string MgVersion;
+            public bool RefMapGuideDotNetApi;
+            public bool BuildUnitTests;
+            public string TestDir;
+        }
+
+        private void worker_DoWork(object sender, DoWorkEventArgs e)
+        {
+            var ba = (BuildArgs)e.Argument;
+            AppendMessage("Validating input parameters");
+            if (!Directory.Exists(ba.FxDir))
+            {
+                throw new Exception("The specified .net framework 4.0 directory does not exist");
+            }
+            else
+            {
+                AppendMessage(".net Framework 4.0  directory found");
+            }
+            if (!Directory.Exists(ba.MgDir))
+            {
+                throw new Exception("The specified MapGuide .net assemblies directory does not exist");
+            }
+            else
+            {
+                AppendMessage("MapGuide .net assemblies directory found");
+            }
+            var sdkBinDir = new DirectoryInfo(Path.Combine(Application.StartupPath, "..\\Bin"));
+            var outputDir = new DirectoryInfo(Path.Combine(Application.StartupPath, "Bin"));
+            var srcDir = new DirectoryInfo(Path.Combine(Application.StartupPath, "Src"));
+            var srcCmdDir = new DirectoryInfo(Path.Combine(srcDir.ToString(), "Commands"));
+            var libDir = new DirectoryInfo(Path.Combine(Application.StartupPath, "Lib\\MapGuide"));
+            var signer = new FileInfo(Path.Combine(sdkBinDir.ToString(), "SignMapGuideApi.exe"));
+            var keyfile = new FileInfo(Path.Combine(sdkBinDir.ToString(), "maestroapi.key"));
+
+            if (!sdkBinDir.Exists)
+            {
+                throw new Exception("The SDK binaries directory could not be found: " + sdkBinDir + ". Ensure this executable is run from the 'LocalNativeProvider' subdirectory of your SDK root directory");
+            }
+            else
+            {
+                AppendMessage("SDK binaries directory exists");
+                if (!signer.Exists)
+                {
+                    throw new Exception("Could not find the SignMapGuideApi.exe in the SDK binaries directory");
+                }
+                if (!keyfile.Exists)
+                {
+                    throw new Exception("Could not find the maestroapi.key in the SDK binaries directory");
+                }
+            }
+            if (!outputDir.Exists)
+            {
+                outputDir.Create();
+                AppendMessage("Created: " + outputDir);
+            }
+            else
+            {
+                foreach (var f in outputDir.GetFiles("*.dll"))
+                    f.Delete();
+                AppendMessage("Cleaned output directory: " + outputDir);
+            }
+            if (!libDir.Exists)
+            {
+                libDir.Create();
+                AppendMessage("Created: " + libDir);
+            }
+            else
+            {
+                foreach (var f in libDir.GetFiles("*.dll"))
+                    f.Delete();
+                foreach (var f in libDir.GetFiles("*.exe"))
+                    f.Delete();
+                foreach (var f in libDir.GetFiles("*.key"))
+                    f.Delete();
+                AppendMessage("Cleaned lib directory: " + libDir);
+            }
+            AppendMessage("Copying MapGuide dlls to lib");
+            foreach (string f in Directory.GetFiles(txtMgDir.Text, "*.dll"))
+            {
+                var fo = Path.Combine(libDir.ToString(), Path.GetFileName(f));
+                File.Copy(f, fo);
+                AppendMessage("Copied: " + f);
+            }
+            AppendMessage("Signing MapGuide assemblies");
+            var targetSignerPath = Path.Combine(libDir.ToString(), signer.Name);
+            var targetKeyPath = Path.Combine(libDir.ToString(), keyfile.Name);
+            File.Copy(signer.ToString(), targetSignerPath);
+            File.Copy(keyfile.ToString(), targetKeyPath);
+            using (var proc = SetupProcess(targetSignerPath, null))
+            {
+                proc.Start();
+                proc.BeginOutputReadLine();
+                proc.WaitForExit();
+                proc.CancelOutputRead();
+                File.Delete(targetSignerPath);
+                File.Delete(targetKeyPath);
+            }
+
+            AppendMessage("Write out AssemblyInfo.cs");
+            File.WriteAllText(Path.Combine(srcDir.ToString(), "AssemblyInfo.cs"), string.Format(Properties.Resources.AssemblyInfo, ba.MgVersion));
+
+            string asmName = "OSGeo.MapGuide.MaestroAPI.Native-" + ba.MgVersion + ".dll";
+            AppendMessage("http://xkcd.com/303/ - " + asmName);
+            var args = new List<string>();
+            args.Add("/debug+");
+            args.Add("/debug:pdbonly");
+            args.Add("/optimize+");
+            args.Add("/target:library");
+            //args.Add("/platform:x86");
+            args.Add("/keyfile:\"" + keyfile + "\"");
+            args.Add("/out:\"" + Path.Combine(outputDir.ToString(), asmName) + "\"");
+            args.Add("/reference:\"" + Path.Combine(sdkBinDir.ToString(), "OSGeo.MapGuide.MaestroAPI.dll") + "\"");
+            args.Add("/reference:\"" + Path.Combine(sdkBinDir.ToString(), "NetTopologySuite.Merged.dll") + "\"");
+            if (ba.RefMapGuideDotNetApi)
+            {
+                args.Add("/reference:\"" + Path.Combine(libDir.ToString(), "MapGuideDotNetApi.dll") + "\"");
+            }
+            else
+            {
+                args.Add("/reference:\"" + Path.Combine(libDir.ToString(), "OSGeo.MapGuide.Foundation.dll") + "\"");
+                args.Add("/reference:\"" + Path.Combine(libDir.ToString(), "OSGeo.MapGuide.Geometry.dll") + "\"");
+                args.Add("/reference:\"" + Path.Combine(libDir.ToString(), "OSGeo.MapGuide.PlatformBase.dll") + "\"");
+                args.Add("/reference:\"" + Path.Combine(libDir.ToString(), "OSGeo.MapGuide.MapGuideCommon.dll") + "\"");
+                args.Add("/reference:\"" + Path.Combine(libDir.ToString(), "OSGeo.MapGuide.Web.dll") + "\"");
+            }
+            args.Add("\"" + Path.Combine(srcDir.ToString(), "*.cs") + "\"");
+            args.Add("\"" + Path.Combine(srcCmdDir.ToString(), "*.cs") + "\"");
+            var cscPath = Path.Combine(ba.FxDir, "csc.exe");
+            using (var proc = SetupProcess(cscPath, string.Join(" ", args.ToArray()).Trim()))
+            {
+                proc.Start();
+                proc.BeginOutputReadLine();
+                proc.WaitForExit();
+                proc.CancelOutputRead();
+                AppendMessage("csc.exe returned " + proc.ExitCode);
+            }
+        }
+
+        private Process SetupProcess(string exe, string argsStr)
+        {
+            var proc = new Process();
+            proc.StartInfo.FileName = exe;
+            proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(exe);
+            proc.StartInfo.UseShellExecute = false;
+            proc.StartInfo.RedirectStandardOutput = true;
+            if (!string.IsNullOrEmpty(argsStr))
+                proc.StartInfo.Arguments = argsStr;
+            proc.OutputDataReceived += (sndr, args) => AppendMessage(args.Data);
+            return proc;
+        }
+
+        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+        {
+            btnBuild.Enabled = true;
+            if (e.Error != null)
+            {
+                AppendMessage("Build FAILED");
+                MessageBox.Show(e.Error.Message);
+            }
+            else
+            {
+                AppendMessage("Build SUCCESS");
+                MessageBox.Show("Build completed. See readme.txt for further instructions");
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/ProviderTemplate/Form1.resx
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Form1.resx	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Form1.resx	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="worker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>180, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/ProviderTemplate/Program.cs
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Program.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Program.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ProviderTemplate
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}


Property changes on: trunk/Tools/Maestro/ProviderTemplate/Properties
___________________________________________________________________
Added: bugtraq:number
   + true

Added: trunk/Tools/Maestro/ProviderTemplate/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Properties/AssemblyInfo.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ProviderTemplate")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ProviderTemplate")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("48bae9b2-c30c-49cf-a8f7-519d5723942e")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.Designer.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,82 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.17929
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ProviderTemplate.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProviderTemplate.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to #region Disclaimer / License
+        ///// Copyright (C) 2010, Jackie Ng
+        ///// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+        ///// 
+        ///// This library is free software; you can redistribute it and/or
+        ///// modify it under the terms of the GNU Lesser General Public
+        ///// License as published by the Free Software Foundation; either
+        ///// version 2.1 of the License, or (at your option) any later version.
+        ///// 
+        ///// This library is distributed in the hope that it will be useful,
+        ///// but WITHOUT ANY WARRANTY; with [rest of string was truncated]";.
+        /// </summary>
+        internal static string AssemblyInfo {
+            get {
+                return ResourceManager.GetString("AssemblyInfo", resourceCulture);
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.resx	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Properties/Resources.resx	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="AssemblyInfo" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\AssemblyInfo.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.Designer.cs	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.17929
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ProviderTemplate.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.settings
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.settings	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Properties/Settings.settings	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

Added: trunk/Tools/Maestro/ProviderTemplate/ProviderTemplate.csproj
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/ProviderTemplate.csproj	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/ProviderTemplate.csproj	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{EDDBBE17-E9A9-43FB-99FE-38DD8E10607A}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>ProviderTemplate</RootNamespace>
+    <AssemblyName>ProviderTemplate</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\SDK\LocalNativeProvider\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\SDK\LocalNativeProvider\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="readme.txt">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\AssemblyInfo.txt" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: trunk/Tools/Maestro/ProviderTemplate/Resources/AssemblyInfo.txt
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/Resources/AssemblyInfo.txt	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/Resources/AssemblyInfo.txt	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,40 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using OSGeo.MapGuide.MaestroAPI.Native;
+using OSGeo.MapGuide.MaestroAPI;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("OSGeo.MapGuide.MaestroAPI.Native-{0}")]
+[assembly: AssemblyDescription("MaestroAPI implementation wrapper for Official MapGuide API v{0}")]
+[assembly: AssemblyProduct("OSGeo.MapGuide.MaestroAPI.Native-{0}")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+[assembly: MaestroApiProvider("Maestro.LocalNative", "Maestro wrapper for official MapGuide API v{0}", typeof(LocalNativeConnection), true, true)]
\ No newline at end of file

Added: trunk/Tools/Maestro/ProviderTemplate/readme.txt
===================================================================
--- trunk/Tools/Maestro/ProviderTemplate/readme.txt	                        (rev 0)
+++ trunk/Tools/Maestro/ProviderTemplate/readme.txt	2012-10-16 16:30:36 UTC (rev 7122)
@@ -0,0 +1,49 @@
+MaestroAPI LocalNative Provider template README
+===============================================
+
+What is this tool?
+------------------
+
+This tool (ProviderTemplate.exe) generates a custom built Maestro.LocalNative provider for the MaestroAPI against your specific version of MapGuide.
+
+This tool was created for the following reasons:
+ 1. The actual source for the provider is effectively the same for most versions of MapGuide due to the additive nature of the MapGuide API
+ 2. It is redundant to keep and maintain the local provider source for each specific version of MapGuide.
+ 3. Be able to have a tailor-made LocalNative provider for your specific version of MapGuide without having to wait for an official Maestro release.
+
+How to use this tool?
+---------------------
+
+Assuming you extracted the Maestro SDK to C:\MaestroSDK, the ProviderTemplate.exe should reside in C:\MaestroSDK\LocalNativeProvider with the
+source code under C:\MaestroSDK\LocalNativeProvider\Src and the SDK binaries under C:\MaestroSDK\bin
+
+DO NOT ALTER THIS DIRECTORY STRUCTURE! The tool currently assumes this directory structure as it is currently laid out.
+
+Run the tool and fill in the following options
+
+ - The .net Framework 4.0 directory (the path to csc.exe)
+ - The MapGuide .net assemblies directory (the path to mapviewernet/bin of your MGOS/AIMS installation)
+ - The MapGuide version (x.y.z). This is used to name the final provider assembly
+ - Assembly type. Basically this tells us what we're referencing. Either the 5 OSGeo assemblies (2.2 and newer) or MapGuideDotNetApi.dll (2.1 and older)
+ - NOT IMPLEMENTED: Enable unit tests + Unit test output directory
+
+Once you have filled in the required options, click build and wait a few moments. Assuming you extracted the Maestro SDK to C:\MaestroSDK:
+
+ - The provider assembly will be under C:\MaestroSDK\LocalNativeProvider\Bin
+ - The signed MapGuide assemblies the provider was built against will be under C:\MaestroSDK\LocalNativeProvider\Lib\MapGuide
+
+Copy the built provider assembly and the MapGuide assemblies under the aforementioned directories out to your application's directory. Edit the ConnectionProviders.xml file
+and register this provider assembly. Your application can now create connections for this particular provider.
+
+Please note that it is not currently possible to a MaestroAPI application to be able to create LocalNative connections of different 
+versions of MapGuide from within the same application session. For example, if you create a LocalNative connection with C:\foo\webconfig.ini
+and then create a LocalNative connection with C:\bar\webconfig.ini, that connection and subsequent connections after will always be initialized
+with settings from C:\foo\webconfig.ini
+
+This is an uncommon use-case (actually more common with Maestro proper, due to its multi-connection support) since most of the time 
+your application will most likely be working against a specific version of MapGuide, but it is something to keep in mind.
+
+Building and running the Unit Tests
+-----------------------------------
+
+TBD
\ No newline at end of file


Property changes on: trunk/Tools/Maestro/SDK
___________________________________________________________________
Modified: svn:ignore
   - SDK.suo
bin
*.cache

   + SDK.suo
bin
*.cache
LocalNativeProvider


Modified: trunk/Tools/Maestro/SignMapGuideApi/SignMapGuideApi.csproj
===================================================================
--- trunk/Tools/Maestro/SignMapGuideApi/SignMapGuideApi.csproj	2012-10-16 12:05:50 UTC (rev 7121)
+++ trunk/Tools/Maestro/SignMapGuideApi/SignMapGuideApi.csproj	2012-10-16 16:30:36 UTC (rev 7122)
@@ -45,6 +45,9 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>copy /Y "$(SolutionDir)..\Properties\maestroapi.key" "$(SolutionDir)..\SDK\bin"</PostBuildEvent>
+  </PropertyGroup>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">



More information about the mapguide-commits mailing list