codingfreaks

codingfreaks

Experiencing Microsoft

  • Archive
  • Tools
  • About
  • Privacy
  • RSS-Feed
  • Github
  • Youtube

Breaking Change im Visual Studio 2013 Add-Reference-Dialog

Alexander Schmidt  |  November 23, 2013

Gestern schockte mich mein neues VS mit einer mir unverständlichen Fehlermeldung. Auch die Community 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

  • Stackoverflow
  • Mein Eintrag bei Microsoft Connect (RETIRED!)

Screencast

[jwplayer mediaid=“2230”]

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:

[caption id=“attachment_2212” align=“alignnone” width=“150”]Abb. 1: Projektstruktur Abb. 1: Projektstruktur[/caption]

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:

[caption id=“attachment_2213” align=“alignnone” width=“150”]Abb. 2: Data.Core-Eigenschaften Abb. 2: Data.Core-Eigenschaften[/caption]

und die AssemblyInfo.cs:

[csharp title=“Listing 1=AssemblyInfo.cs 2=des 3=Projektes 4=Data.Core” language=1:] 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”)] [/csharp]

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:

[caption id=“attachment_2216” align=“alignnone” width=“150”]Abb. 3: Referenz auf Data.Core setzen Abb. 3: Referenz auf Data.Core setzen[/caption]

Das klappt erstmal super:

[caption id=“attachment_2217” align=“alignnone” width=“150”]Abb. 4: Referenz ist angekommen Abb. 4: Referenz ist angekommen[/caption]

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

[caption id=“attachment_2218” align=“alignnone” width=“150”]Abb. 5: Fehler beim 2. Core-Projekt Abb. 5: Fehler beim 2. Core-Projekt[/caption]

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:

[caption id=“attachment_2219” align=“alignnone” width=“150”]Abb. 6: Quick-Fix Abb. 6: Quick-Fix[/caption]

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:

[caption id=“attachment_2221” align=“alignnone” width=“150”]Abb. 7: Erfolgreich im VS 2012 Abb. 7: Erfolgreich im VS 2012[/caption]

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:

[xml title=“Listing 1=*.csproj 2=in 3=VS 4=2012” language=2:] {73e07fb7-0d00-4257-bd71-bb55f3bb0ee2} Core %28Data\Core%29 {f3574dcf-60b1-4514-b6b9-24fcb5d09bb1} Core %28Logic\Core%29 [/xml]

VS 2013 macht das beim Hinzufügen der Referenz auf Data.Core so:

[xml title=“Listing 1=VS 2=2013-Referenz” language=3:] {73e07fb7-0d00-4257-bd71-bb55f3bb0ee2} Core [/xml]

Da ist natürlich kein Platz mehr für ein weiteres Projekt mit dem Name-Tag “Core”.


Alexander Schmidt

Written by Alexander Schmidt who lives and works in Magdeburg building useful things. You should follow him on Youtube