Entwickler-Ecke

WinForms - Versionsnummer einer DLL


Arthuro - Mo 12.11.07 10:21
Titel: Versionsnummer einer DLL
Guten Morgen,

Ich versuche die Versions nummer einer DLL Datei rauszukriegen, leider bekomm ich diese Fehlermeldung:

C#-Quelltext
1:
Eine Konvertierung vom Typ "char" in "System.Reflection.Assembly" ist nicht möglich.                    



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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Collections;
using System.Reflection;
using System.Runtime.CompilerServices;
 
namespace DateiVersionDLL
{
    public partial class Form1 : Form
    {
        FolderBrowserDialog dlgFileOpen = new FolderBrowserDialog();

        public Form1()
        {
            InitializeComponent();
        }

        private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dlgFileOpen.Description = "Öffnen eines Verzeichnissses";
            dlgFileOpen.ShowDialog();

            try
            {
                string[] arDateien;
                string sSelectedPath = dlgFileOpen.SelectedPath.ToString();
                List<string> sExtensions = new List<string>();

                arDateien = Directory.GetFileSystemEntries(sSelectedPath);
                arDateien.Length.ToString();

                foreach (string s_arDateien in arDateien)
                {
                    if (Path.GetExtension(s_arDateien) == ".dll")
                    {
                        sExtensions.Add(s_arDateien);
                    }            
                }

                foreach (string s_filename in sExtensions)
                {
                    BuildList(s_filename);
                }
            }

            catch(Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }            
        }

        int BuildList(string s_filename)
        {
            listView1.BeginUpdate();
            foreach (Assembly asm_filename in s_filename) <-- hier tritt der fehler auf
            {
                AssemblyName asmName = asm_filename.GetName();
                ListViewItem newItem = new ListViewItem(asmName.Name);
                newItem.SubItems.Add(asmName.Version.ToString());

            }
            listView1.Sort();
            listView1.EndUpdate();
            

            return 0;
        }
        

    }
}


Christian S. - Mo 12.11.07 10:25

Hallo!

foreach geht die Elemente einer Aufzählung (also Array, Liste, ...) usw. durch. Wie kommst Du auf die Idee, ein String bestände aus Assemblies? :gruebel:

Ich würde Dir dringend zu ein paar Grundlagen raten: http://www.galileocomputing.de/openbook/csharp/

Grüße
Christian


Arthuro - Mo 12.11.07 10:34

Hmmm an den Grundlagen liegt es sicherlich nicht, ich hab einfach mal was ausprobiert. Den ich hab nirgends was darüber gefunden wie man von .dll Datein die Versionsnummer rauskriegt. Das würde mich ein schritt weiter bringen wenn ich weiß wie es geht.

Gruß Arthuro


Christian S. - Di 13.11.07 00:18

user profile iconArthuro hat folgendes geschrieben:
Hmmm an den Grundlagen liegt es sicherlich nicht, ich hab einfach mal was ausprobiert.
Wenn die Funktionsweise einer foreach-Schleife nicht verstanden ist, fehlt es an Grundlagen.

user profile iconArthuro hat folgendes geschrieben:
Den ich hab nirgends was darüber gefunden wie man von .dll Datein die Versionsnummer rauskriegt. Das würde mich ein schritt weiter bringen wenn ich weiß wie es geht.
Schau Dir einfach mal die Konstruktoren der Assembly-Klasse an. Da dürfte auch einer bei sein, der einen Dateinamen annimmt.


Arthuro - Di 13.11.07 10:53
Titel: Speichern von Werten einer DLL mit Listview
Guten Tag,

Ich hab ein kleines Problem, wenn ich bei meinem ToolStrip auf Speichern klicke erhalte ich nur den Dateinamen nicht die anderen beiden werte wie Dateiversion und Datum.

Das ganze sieht so aus Dateiname.dll 1.2.4 29.05.07

Ich kriege bei meinem Programm aber nur den Dateinamen raus wenn ich das in ein Textdokument speichern möchte.


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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Collections;
using System.Reflection;
using System.Runtime.CompilerServices;

namespace DateiVersionDLL
{
    /// <summary>
    /// 
    /// </summary>
    public partial class Form1 : Form
    {
        FolderBrowserDialog dlgFileOpen = new FolderBrowserDialog();

        /// <summary>
        /// 
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Wird das Öffnen Toolstrip betätigt so wird
        /// </summary>
        private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dlgFileOpen.Description = "Öffnen eines Verzeichnissses";
            dlgFileOpen.ShowDialog();

            try
            {
                string[] arDateien;
                string sSelectedPath = dlgFileOpen.SelectedPath.ToString();
                List<string> sExtensions = new List<string>();

                arDateien = Directory.GetFileSystemEntries(sSelectedPath);
                arDateien.Length.ToString();

                foreach (string s_arDateien in arDateien)
                {
                    if (Path.GetExtension(s_arDateien) == ".dll")
                    {
                        sExtensions.Add(s_arDateien);
                    }            
                }

                foreach (string s_filename in sExtensions)
                {
                    BuildList(s_filename);                  
                }
            }

            catch(Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }            
        }

        /// <summary>
        /// Die Funktion BuildList die den Parameter s_filename annimmt
        /// </summary>
        int BuildList(string s_filename)
        {
            FileVersionInfo VersionsInfo = FileVersionInfo.GetVersionInfo(s_filename);
            string DateiVersion = VersionsInfo.FileVersion.ToString();
            string DateiName = VersionsInfo.OriginalFilename.ToString();
            DateTime time = File.GetLastWriteTimeUtc(s_filename);

            ListViewItem liste = null;
            liste = listView1.Items.Add(s_filename);
            liste.SubItems.Add(DateiVersion);
            liste.SubItems.Add(time.ToString());

            return 0;
        }

        /// <summary>
        /// 
        /// </summary>
        private void speichernUnterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlgSpeichern = new SaveFileDialog();
            dlgSpeichern.Filter = "Textdatei | *.txt";
            if (dlgSpeichern.ShowDialog() == DialogResult.OK)
            {                
                foreach (ListViewItem item in listView1.Items)
                {
                    string listname = item.Text.ToString();
                    File.AppendAllText(dlgSpeichern.FileName, item.Text.ToString() + ";" + item.SubItems[0].Text.ToString() + ";" + item.SubItems[0].Text.ToString());
                }
       
                //StreamWriter swWriteContext = File.CreateText(Application.StartupPath + "\\DLL-Version1.txt");
                //swWriteContext.WriteLine(listname);
                //swWriteContext.WriteLine(as);
                //swWriteContext.WriteLine(as);
                
                //Den Dateizugriff beenden 
                //swWriteContext.Close();
            }
        }       
    }
}


Arthuro - Di 13.11.07 11:54

So habe ich es jetzt geschaffT:

Lösung:

C#-Quelltext
1:
File.AppendAllText(dlgSpeichern.FileName, item.Text.ToString() + ";     " + item.SubItems[1].Text.ToString() + ";       " + item.SubItems[2].Text.ToString());                    


Jetzt habe ich noch eine frage wie kann ich es machen das nach jedem durchlauf der eine Zeile tiefer springt im textdokument. ?!

Gruß Arthuro


jasocul - Di 13.11.07 12:38

Hallo,

bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:

*geschlossen*


Viele Grüße,
Jasocul