Breaking Change im Visual Studio 2013 Add-Reference-Dialog

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:

Abb. 1: Projektstruktur
Abb. 1: Projektstruktur

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:

Abb. 2: Data.Core-Eigenschaften
Abb. 2: Data.Core-Eigenschaften

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:

Abb. 3: Referenz auf Data.Core setzen
Abb. 3: Referenz auf Data.Core setzen

Das klappt erstmal super:

Abb. 4: Referenz ist angekommen
Abb. 4: Referenz ist angekommen

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

Abb. 5: Fehler beim 2. Core-Projekt
Abb. 5: Fehler beim 2. Core-Projekt

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:

Abb. 6: Quick-Fix
Abb. 6: Quick-Fix

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:

Abb. 7: Erfolgreich im VS 2012
Abb. 7: Erfolgreich im VS 2012

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“.

One Reply to “Breaking Change im Visual Studio 2013 Add-Reference-Dialog”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.