aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Base/ServiceBase.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/Base/ServiceBase.cs')
-rw-r--r--OpenSim/Services/Base/ServiceBase.cs13
1 files changed, 10 insertions, 3 deletions
diff --git a/OpenSim/Services/Base/ServiceBase.cs b/OpenSim/Services/Base/ServiceBase.cs
index ef30cba..a7eb2be 100644
--- a/OpenSim/Services/Base/ServiceBase.cs
+++ b/OpenSim/Services/Base/ServiceBase.cs
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.IO;
30using System.Reflection; 31using System.Reflection;
31using log4net; 32using log4net;
32using Nini.Config; 33using Nini.Config;
@@ -45,9 +46,15 @@ namespace OpenSim.Services.Base
45 46
46 public T LoadPlugin<T>(string dllName, Object[] args) where T:class 47 public T LoadPlugin<T>(string dllName, Object[] args) where T:class
47 { 48 {
48 string[] parts = dllName.Split(new char[] {':'}); 49 // The path:type separator : is unfortunate because it collides
50 // with Windows paths like C:\...
51 // When the path provided includes the drive, this fails.
52 // Hence the root/noroot thing going on here.
53 string pathRoot = Path.GetPathRoot(dllName);
54 string noRoot = dllName.Substring(pathRoot.Length);
55 string[] parts = noRoot.Split(new char[] {':'});
49 56
50 dllName = parts[0]; 57 dllName = pathRoot + parts[0];
51 58
52 string className = String.Empty; 59 string className = String.Empty;
53 60
@@ -79,7 +86,7 @@ namespace OpenSim.Services.Base
79 continue; 86 continue;
80 87
81 Type typeInterface = 88 Type typeInterface =
82 pluginType.GetInterface(interfaceName, true); 89 pluginType.GetInterface(interfaceName);
83 if (typeInterface != null) 90 if (typeInterface != null)
84 { 91 {
85 T plug = (T)Activator.CreateInstance(pluginType, 92 T plug = (T)Activator.CreateInstance(pluginType,