Autor Beitrag
FrEEzE2046
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Windows 98, 2000, XP Pro, Vista Ultimate 32 & 64 Bit, Windows 7 Beta 64 Bit
C/C++, C# (VS 2008 TeamSystem) - Delphi (Delphi 5) - Java (Eclipse)
BeitragVerfasst: Mi 26.05.10 20:44 
Hallo,

ich benutze das Visual Studio 2010 Premium und möchte gerne Metadaten von meinen eigenen Assemblies erhalten. Es geht mir dabei immer explizit um die Assembly in der der Code dann auch ausgeführt würde.

Ich brauche die Anzahl an inneren Namespace, Klassen und Methoden (global). Ist dies irgendwie möglich?



EDIt: Okay, die Klasse Assembly scheint mir ja alles zu liefern, was ich brauche. Kann man eigentlich den Namespace der durch die Assembly nach außen gegeben wird, mit einem Attribut verändern?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 26.05.10 22:34 
user profile iconFrEEzE2046 hat folgendes geschrieben Zum zitierten Posting springen:
den Namespace der durch die Assembly nach außen gegeben wird
Was genau meinst du damit? Ein Namespace ist eigentlich nur ein Präfix eines Typnamens, weder die Assembly noch die CLR weiß etwas davon.

_________________
>λ=
FrEEzE2046 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Windows 98, 2000, XP Pro, Vista Ultimate 32 & 64 Bit, Windows 7 Beta 64 Bit
C/C++, C# (VS 2008 TeamSystem) - Delphi (Delphi 5) - Java (Eclipse)
BeitragVerfasst: Do 27.05.10 13:13 
Das mit dem Namespace hat sich mittlerweile erledigt. Es ist folgendermaßen:

Ich habe eine kleine Bibliothek, die aus mehreren Class Library Projects und damit Assemblies besteht. Die oberste Ebene - die von allen anderen referenziert wird - soll eine Methode erhalten, die die Versionsnummer anhand gewisser Assembly-Informationen bildet:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
internal class LibraryHelper
{
    static string CurrentVersion
    {
        get;
        set;
    }
}



Diese Methode soll allen anderen Class Library Projects ebenfalls zur Verfügung stehen, aber natürlich letztendlich nicht dem Benutzer dieser Bibliothek.

Ist das irgendwie zu bewerkstelligen? Falls nicht, würde es mir auch reichen eine Art Makro zu haben ...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 27.05.10 13:19 
Japp, das funktioniert genau so mit InternalsVisibleToAttribute.

_________________
>λ=
FrEEzE2046 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Windows 98, 2000, XP Pro, Vista Ultimate 32 & 64 Bit, Windows 7 Beta 64 Bit
C/C++, C# (VS 2008 TeamSystem) - Delphi (Delphi 5) - Java (Eclipse)
BeitragVerfasst: Do 27.05.10 16:01 
Hi, danke für deine Antwort. Ich hätte noch eine Frage.

Ich wollte meine Summarys in externe Dateien auslagern. Dies soll ja per <include> möglich sein. Ich habe original das Beispiel von MSDN benutzt ... aber ohne Erfolg.

Er kompiliert zwar ohne Warnung (mit /doc), aber das IntelliSense zeigt mir meine Summarys nicht an. Woran kann das liegen? Ich benutze das VS 2010 Premium.


PS:
Wegen der Versionierung:

So habe ich die Klasse die die Version bildet umgesetzt. Leider kann ich sie aber nicht setzen:

ausblenden C#-Quelltext
1:
[assembly: AssemblyVersion(LibraryHelper.CurrentVersion)]					

ausblenden Quelltext
1:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type    35					


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:
internal static class LibraryHelper
{
    internal static int MajorVersion = 1;
    internal const string CurrentVersion = _BuildVersionNUmber();


    private static string _BuildVersionNUmber()
    {
        int modules, classes, methods = 0;

        Assembly thisAssembly = Assembly.GetExecutingAssembly();

        modules = thisAssembly.GetModules().Length;

        Type[] exportedTypes = thisAssembly.GetExportedTypes();
        classes = exportedTypes.Length;

        foreach (Type type in exportedTypes)
        {
            methods += type.GetMethods().Length;
        }

        return string.Format("{0}.{1}.{2}.{3}", MajorVersion, modules, classes, methods);
    }


    static LibraryHelper()
    {

    }
}
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 27.05.10 17:00 
user profile iconFrEEzE2046 hat folgendes geschrieben Zum zitierten Posting springen:
Ich wollte meine Summarys in externe Dateien auslagern. Dies soll ja per <include> möglich sein.
Da das genau genommen nicht mehr unter Assembly-Metadaten fällt, sollten wir das lieber in einem neuen Thread besprechen :) . Aber wenn die erstellte XML-Datei stimmt, liegt es schon einmal nicht an <include>.

user profile iconFrEEzE2046 hat folgendes geschrieben Zum zitierten Posting springen:
Leider kann ich sie aber nicht setzen:
Ja, so geht das leider nicht (müsste ja Code zur Kompilierzeit ausgeführt werden). Warum willst du denn so einen komplizierten Buildstring haben, der nicht einmal Einzigartigkeit garantiert?

_________________
>λ=