Autor |
Beitrag |
FrEEzE2046
      
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)
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 26.05.10 22:34
FrEEzE2046 hat folgendes geschrieben : | 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 
      
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)
|
Verfasst: 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:
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 27.05.10 13:19
Japp, das funktioniert genau so mit InternalsVisibleToAttribute.
_________________ >λ=
|
|
FrEEzE2046 
      
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)
|
Verfasst: 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:
C#-Quelltext 1:
| [assembly: AssemblyVersion(LibraryHelper.CurrentVersion)] |
Quelltext 1:
| An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type 35 |
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 27.05.10 17:00
|
|
|