Gestern schockte mich mein neues VS mit einer mir unverständlichen Fehlermeldung. Auch die Community bei stackoverflow konnte mir nur mit einem Ausweg weiter helfen. Ich halte das Verhalten für einen Bug und will Euch natürlich an meinen Erkenntnissen teilhaben lassen.
Links
Ich habe den Fehler bei Microsoft eingestellt. Hier der Link:
Bug when adding references to projects with same project-names
Hier mein Beitrag bei Stackoverflow:
Reference could not be added because of same name
Screencast
Was ist passiert?
Ich muss dazu erstmal bemerken, dass ich ein großer Freund von Konventionen und Ordnung in Projekten bin. Daher habe ich für mich genau eine solche Konvention geschaffen, die das Benennen von Projekten betrifft. Zur Erklärung vielleicht erstmal ein Screenshot meines Solution Explorers:

Der Sinn ist nun der, dass sich die Struktur direkt in den Namespaces und Assembly-Namen widerspiegelt. Hier am Beispiel des Data.Core-Projektes erstmal die Projekteigenschaften:

und die AssemblyInfo.cs:
using System.Reflection; [assembly: AssemblyTitle("SampleSolution.Data.Core")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Core")] [assembly: AssemblyCopyright("Copyright © 2013")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
Ok. Logik und UI sind nach dem gleichen Schema aufgebaut. Ich baue das Projekt und nun entstehen in den bin-Ordnern logischerweise die richtigen Dateien.
Setzen einer Referenz in UI
Jetzt will ich dem UI-Projekt eine Referenz auf das Data-Projekt hinzufügen. Also Rechtsklick auf References und dann Add Reference:

Das klappt erstmal super:

Aber wehe, ich versuche das nun noch mit Logic.Core:

Wie beim oben gelinkten stackoverflow-Artikel richtig geantwortet, kann man das nun lösen, indem man den Projekten z.B. den Namespace-Ordner-Namen voranstellt. Das würde dann ungefähr so aussehen:

Bewertung
Bis herher könnte man das ganze noch als nervig bezeichnen. Viele werden dieses Problem gar nicht haben, weil sie die Projekte nicht so benennen, wie ich. Andere werden sage: Na dann benenne ich sie halt um. Ich vertrete jedoch den Standpunkt, dass dies in großen Projekten schlechterdings oft nicht möglich ist. Da will ein UI-Entwickler nun VS 2013 einsetzen, öffnet die Projektmappe und kann plötzlich keine Referenzen mehr setzen.
Das große Problem ist nämlich hier: Es geht im Visual Studio 2012 ohne Probleme!!!
Das gleiche im Visual Studio 2012
Ich schließe das Projekt nun im VS 2013 und öffne es einfach in VS 2012. Jetzt nehme ich die Änderungerungen aus Abb. 6 zurück und füge beide „Core“-Projekte der Solution hinzu. Das Ergebnis ist ganz sauber das Folgende:

Das Beste kommt aber noch: Speichere ich jetzt alles im VS 2012 und öffne V die Solution dann wieder imS 2013, funktioniert alles einwandfrei.
Zusammenfassung
Der Dialog zum Hinzufügen einer Referenz zu Projekten im VS 2013 hat meiner Meinung nach einen Bug. Das führt zu einem Breaking Change zwischen VS 2012 und VS 2013 und entgegen der Aussagen von Microsoft sind die Solution-Dateien nicht kompatibel zueinander. Der Bug entsteht dadurch, dass beim Hinzufügen der Referenzen in VS 2012 Folgendes in der *.csproj-Datei entsteht:
<ItemGroup> <ProjectReference Include="..\Data\Core\Core.csproj"> <Project>{73e07fb7-0d00-4257-bd71-bb55f3bb0ee2}</Project> <Name>Core %28Data\Core%29</Name> </ProjectReference> <ProjectReference Include="..\Logic\Core\Core.csproj"> <Project>{f3574dcf-60b1-4514-b6b9-24fcb5d09bb1}</Project> <Name>Core %28Logic\Core%29</Name> </ProjectReference> </ItemGroup>
VS 2013 macht das beim Hinzufügen der Referenz auf Data.Core so:
<ItemGroup> <ProjectReference Include="..\Data\Core\Core.csproj"> <Project>{73e07fb7-0d00-4257-bd71-bb55f3bb0ee2}</Project> <Name>Core</Name> </ProjectReference> </ItemGroup>
Da ist natürlich kein Platz mehr für ein weiteres Projekt mit dem Name-Tag „Core“.
Eine Antwort auf „Breaking Change im Visual Studio 2013 Add-Reference-Dialog“