Autor Beitrag
dabauer82
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 05.10.09 10:26 
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:
ausblenden 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:

ausblenden 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:

ausblenden volle Höhe 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

      /// <summary internal= "true">
      /// The static constructor instantiates and initializes the MATLAB Component
      /// Runtime instance.
      /// </summary>
      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");
            }
        }


Zuletzt bearbeitet von dabauer82 am Mo 05.10.09 12:48, insgesamt 1-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 05.10.09 12:50 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.