ich erstelle gerade einen ISourceGenerator und möchte diesen nicht nur in Projekten mit Main Methode, sondern auch in Klassenbibliotheken einsetzen.
Der Generator erstellt eine Erweiterungsmethode in einer eigenen Klasse für den DI Registrar. Als Namespace möchte ich gerne den Basisnamespace der Lib einsetzen, damit die Erweiterungsmethode direkt verfügbar ist.
In ausführbaren Projekten erhält man den Namespace der Main Methode relativ simpel über
baseNamespace = context.Compilation.GetEntryPoint(context.CancellationToken)?.ContainingNamespace.ToDisplayString();
In einer Klassenbibliothek ist die Rückgabe von GetEntryPoint() allerdings null. Dort behelfe ich mir mit
baseNamespace = context.Compilation.Assembly.MetadataName;
Ich hatte überlegt einfach die Namespaces durchzugehen und aneinanderzusetzen und zu schauen ab wann ich das erste mal eine Typdefinition finde - das finde ich allerdings unsauber (Namespace Parts in der Assembly erhält man via context.Compilation.Assembly.NamespaceNames).
Irgendwie fehlt mir die saubere Lösung.