Entwickler-Ecke
Basistechnologien - Nicht verständliches Warning beim Laden eines Verweises
dabauer82 - Mo 05.10.09 10:26
Titel: Nicht verständliches Warning beim Laden eines Verweises
Guten Tag,
zur Zeit stört mich ein Warning in der Ausgabe den ich nicht verstehen kann. Ich bitte deswegen um Tipps und Ratschläge um diesen zu entfernen.
Was ich gemacht habe und worum es geht:
Ich habe in Matlab eine .Net-dll compiled und in MS Visual Studio über Verweis importiert. Matlab legte nach dem compilen 2 Ordner an:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| + distrib - TPGMatlab.dll - TPGMatlab.ctf - readme.txt + src - TPGMatlabClass.cs - TPGMatlab.dll - TPGMatlab.ctf - TPGMatlab.xml - readme.txt - build.txt - mccExludedFiles |
Als Verweis habe ich die Datei distrib/TPGMAtlab.dll verlinkt. Mein Programm funktioniert fehlerfrei - aber ich bekomme diese beiden Warnings:
Quelltext
1: 2: 3: 4: 5: 6:
| D:\fdm-gg\AutoMiPro\AutoMiPro\AutoMiPro\ASSystem\ASAssembly\ASGripper\TPG\ThreePointGripper.cs(87,17): Warnung CS0436: Der Typ "TPGMatlab.TPGMatlabClass" in "D:\fdm-gg\AutoMiPro\AutoMiPro\DLL\TPGMatlab\src\TPGMatlabClass.cs" verursacht einen Konflikt mit dem importierten Typ "TPGMatlab.TPGMatlabClass" in "d:\fdm-gg\AutoMiPro\AutoMiPro\DLL\TPGMatlab\distrib\TPGMatlab.dll". Der in "D:\fdm-gg\AutoMiPro\AutoMiPro\DLL\TPGMatlab\src\TPGMatlabClass.cs" definierte Typ wird verwendet. D:\fdm-gg\AutoMiPro\AutoMiPro\DLL\TPGMatlab\src\TPGMatlabClass.cs(283,16): (Verknüpfter Speicherort) d:\fdm-gg\AutoMiPro\AutoMiPro\DLL\TPGMatlab\distrib\TPGMatlab.dll: (Verknüpfte Datei) |
In Zeile 283,16ff steht folgendes:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| public class TPGMatlabClass : IDisposable { #region Constructors
static TPGMatlabClass() { if (MWArray.MCRAppInitialized) { Assembly assembly= Assembly.GetExecutingAssembly();
string ctfFilePath= assembly.Location;
int lastDelimeter= ctfFilePath.LastIndexOf(@"\");
ctfFilePath= ctfFilePath.Remove(lastDelimeter, (ctfFilePath.Length - lastDelimeter));
mcr= new MWMCR(MCRComponentState.MCC_TPGMatlab_name_data, MCRComponentState.MCC_TPGMatlab_root_data, MCRComponentState.MCC_TPGMatlab_public_data, MCRComponentState.MCC_TPGMatlab_session_data, MCRComponentState.MCC_TPGMatlab_matlabpath_data, MCRComponentState.MCC_TPGMatlab_classpath_data, MCRComponentState.MCC_TPGMatlab_libpath_data, MCRComponentState.MCC_TPGMatlab_mcr_application_options, MCRComponentState.MCC_TPGMatlab_mcr_runtime_options, MCRComponentState.MCC_TPGMatlab_mcr_pref_dir, MCRComponentState.MCC_TPGMatlab_set_warning_state, ctfFilePath, true); } else { throw new ApplicationException("MWArray assembly could not be initialized"); } } |
JüTho - Mo 05.10.09 11:47
Hallo und :welcome:
Es wäre schöner gewesen, wenn du in die zitierte Fehlermeldung ein paar Zeilenumbrüche eingebaut hättest, dann könnte man es besser lesen und die Angaben vergleichen. So ist es bei mir mehr "Raten".
Es sieht so aus, als wenn derselbe Klassenname in zwei DLLs definiert würde und durch die verwendeten Namespaces nicht eindeutig ist, welcher Typ konkret gemeint ist. Der Compiler rät also auch und gibt dir in der Warnung einen Hinweis darauf, welche Version er nimmt.
Gruß Jürgen
dabauer82 - Mo 05.10.09 12:50
JüTho hat folgendes geschrieben : |
Hallo und :welcome:
Es wäre schöner gewesen, wenn du in die zitierte Fehlermeldung ein paar Zeilenumbrüche eingebaut hättest, dann könnte man es besser lesen und die Angaben vergleichen. So ist es bei mir mehr "Raten".
Es sieht so aus, als wenn derselbe Klassenname in zwei DLLs definiert würde und durch die verwendeten Namespaces nicht eindeutig ist, welcher Typ konkret gemeint ist. Der Compiler rät also auch und gibt dir in der Warnung einen Hinweis darauf, welche Version er nimmt.
Gruß Jürgen |
so besser?
wie kann ich denn nun diese eindeutige Zuweisung machen? Liegt es evtl daran, dass ich die distrib/TPGMatlab.dll verlinkt habe, und haette die src/TPGMAtlab.dll nehmen sollen? Woher weiß ich denn, welche Dateien ich alle brauche?
JüTho - Mo 05.10.09 13:05
Naja, richtig schön lesbar ist es wegen der langen Pfade noch nicht, aber besser.
Sehe ich es richtig, dass diese TPGMatlab.dll als "Fremdprodukt" eingebunden wird? Hast du bei der Referenz darauf "ins Ausgabeverzeichnis kopieren" eingetragen und später auf die distrib-Version noch eine Referenz eingetragen?
Vorschlag: Eine Referenz in deinem Projekt wird nur auf "deine" Originalversion gesetzt, also auf das Verzeichnis, wo diese DLL installiert wurde. Bei der Übernahme ins Ausgabeverzeichnis wird "copy if newer" festgelegt.
| Zitat: |
| Woher weiß ich denn, welche Dateien ich alle brauche? |
Lass die eine oder andere Referenz weg; dann wird zuerst beim Compilieren und später beim Programmstart gemeckert - daran wirst du es merken.
Prüfe auch einmal die config-Datei der Anwendung. Vielleicht kannst du mit <probing privatePath="paths"/> auf Unterverzeichnisse zur Laufzeit verweisen.
Gruß Jürgen
PS. Ich vermute, dass es nur eine vorsorgliche Warnung ist, die nicht auf ein Problem hinweist. Aber ich würde ebenfalls die Ursache suchen, um sie zu beseitigen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!