Andere haben bereits darauf hingewiesen, dass es zwischen Baugruppen keine Unterscheidung gibt. Sobald Sie die Lösungen erstellt haben, sind alle implementierten Assemblys nur Assemblys, ob Sie nun oder als Referenzen enthalten sind, es ist alles gleich.
Die einzige genaue Lösung ist, die .sln-Datei zu Ihrer Verfügung zu haben. Es ist nur eine XML-Datei mit einem einfachen Schema und es ist einfach, Daten daraus zu ziehen, vorausgesetzt, Sie haben Zugriff darauf.
Eine weitere Option könnte die Anwendung von Heuristiken zur Unterscheidung sein. Sie könnten beispielsweise versuchen, Namensbereiche aus Typen in der ausführenden Assembly zu erstellen. Dies ist der Einstiegspunkt der Anwendung und daher könnten wir argumentieren, dass es Teil der Lösung gewesen sein muss.
Dann können Sie Assemblys überprüfen, die von GetAssemblies() abgerufen wurden, und dann die Namespaces der darin enthaltenen Typen überprüfen. Wenn Sie Überschneidungen zwischen (Teilen) von Namespacepfades zwischen einer Assembly und der ausführenden Assembly finden, können Sie sie aus der gleichen Quelle deklarieren.
Dies ist wiederum nur eine Heuristik und wird im allgemeinen nicht zufriedenstellend sein. In der Tat ist es ziemlich einfach, ein Gegenbeispiel zu finden.
Aber andererseits, wenn ich meine eigenen Lösungen als Test-Set nehme, würde diese Heuristik perfekt funktionieren, dank der Tatsache, dass alle meine Projekte mit Root-Namespace kommen, was der Name meines Unternehmens ist ist nicht wahr für die - ziemlich offensichtlich in diesem eingeschränkten Bereich.
Ein offensichtliches Gegenbeispiel ist, wenn Sie einige Ihrer eigenen Projekte als NuGet-Pakete bereitstellen. Dann teilen sie sich den Namensraum, sind aber nicht Teil der Lösung.
Fazit ist, dass diese heuristische Lösung wahrscheinlich nicht Ihre Probleme lösen wird. Aber ich hoffe, dass Sie zumindest einen Teil davon auswählen und mit anderen Ideen kombinieren können, um eine angemessene Lösung zu finden.
Was bedeutet "spezifisch für meine Projekte"? Zur Laufzeit gibt es keine Vorstellung von "Ihre Lösung" im Gegensatz zu "Pakete"; Es gibt nur Versammlungen. – SLaks
Sie können das zur Laufzeit nicht bekommen - zur Laufzeit gibt es keinen Unterschied zwischen einer Projektreferenz und einer Assembly-Referenz. Sie müssen sich die Lösungsdefinitionsdatei ('.sln') ansehen und die Ausgaben für jedes Projekt bestimmen. Was ist der Zweck? Warum müssen Sie die beiden unterscheiden? –
Sie können [ein benutzerdefiniertes Attribut auf Ihre eigenen Baugruppen anwenden] (http://stackoverflow.com/a/1936982/382780), um sie zu filtern. Ist es eine Option, dies zu den Projekten in Ihrer Lösung hinzuzufügen? – 31eee384