Entwickler-Ecke
C# - Die Sprache - Metadaten eigener Assemblies
FrEEzE2046 - Mi 26.05.10 20:44
Titel: Metadaten eigener Assemblies
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 - 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 - 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 - Do 27.05.10 13:19
Japp, das funktioniert genau so mit InternalsVisibleToAttribute.
FrEEzE2046 - 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 [
http://msdn.microsoft.com/de-de/library/9h8dy30z.aspx] 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 |
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 - Do 27.05.10 17:00
FrEEzE2046 hat folgendes geschrieben : |
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>.
FrEEzE2046 hat folgendes geschrieben : |
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?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!