Zduplikowana definicja klasy

0

Witam.

Swego czasu robiłem projekt który miał w założeniu pluginy na dllkach.

Mam sobie Klasę bazową - BaseObject który jest używany do kompilacji programu głównego.
Oraz mam klasę ExampleRobot która dziedziczy z BaseObject więc również jest razem z nią kompilowana do DLLki.

Kiedy próbuje sprawdzić czy dana klasa jest dziedziczy z BaseObject dostaje taki komunikat:

		
BaseObject	The type 'RobotSIM.BaseObject' exists in both 'RobotSIM.exe' and 'ExampleRobot.dll'	

otrzymuje go w takim kawałku kodu:

public void LoadPlugin(string fname) 
        {
            
                Assembly loadedAssembly = Assembly.LoadFrom(fname);
                Type[] loadedTypes = loadedAssembly.GetTypes();
                foreach(Type type in loadedTypes)
                {
                    if (type.IsSubclassOf(typeof(RobotSIM.BaseObject)) && type.Name != "BaseObject" && type.Name != "Mesh")
                    {
                        pluginClasses.Add(type);
                        object temp = Activator.CreateInstance(type);
                        pluginClassesNames.Add(((BaseObject)temp).ClassName);
                    }
                }
        }

Kompilator jednak przechodzi dalej nie wyrzucając błędu ale przez to nie działa.

Nie da się skompilować Dllki bez tego obiektu bazowego ani też programu bo obie rzeczy tego używają, czy jest na to jakiś sposób? Kompilacja obiektu bazowego do DLLki pomoże?

0

Niech BaseObject będzie klasą publiczną w głównym programie, w pluginach dodaj jako referencję główny program i dziedzicz prosto z niej. Domyślam się, że teraz niepotrzebnie masz kod klasy i w głównym programie i w pluginie.

0

Ewentualnie wrzuc BaseObject do osobnej dllki, referowanej przez glowny projekt i wszystkie pluginy. Pamietaj, ze typ identyfikowalny jest przez nazwe, przestrzen nazw i assembly - przez to ostatnie wlasnie masz problem. Pelny identyfikator klasy to mniej wiecej cos takiego:

System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

W Twoim przypadku to pewnie wyglada tak:

RobotSIM.BaseObject, ExampleRobot, Version=0.0.0.0, Culture=neutral, PublicKeyToken=xxx

i tak:

RobotSIM.BaseObject, RobotSIM, Version=0.0.0.0, Culture=neutral, PublicKeyToken=xxx

czyli sa to 2 rozne typy.

0

Ale jak dodać główny program jako referencje??

//EDIT

Ok wystarczyło wskazać EXE
Potestuje i zobaczymy czy problem rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1