2015-06-02 9 views
19

ich eine C# Test-Projekt in VS2015 RC angelegt haben. es baut vor Ort, aber wenn ich auf unserem CI-Build-Server (Teamcity) zu bauen versuchen, schlägt es mit Fehlern:Referenz Microsoft.VisualStudio.QualityTools.UnitTestFramework für CI Build

UnitTest1.cs (2,17): error CS0234: Der Typ oder Namespace-Name 'Visual Studio' tut nicht im Namespace 'Microsoft' vorhanden (sind Sie fehlt eine Assembly-Referenz?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj ] UnitTest1.cs (9,10): Fehler CS0246: Der Typ oder Namespacename 'TestMethod' konnte nicht gefunden werden (fehlt eine using-Direktive oder eine Assemblyreferenz?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP .MetadataService.Api.Tests.csproj] UnitTest1.cs (9,10): error CS0246: Der Typ oder Namespace-Name 'TestMethodAttribute' konnte nicht gefunden werden (möglicherweise fehlt eine using -Direktive oder ein Assemblyverweis?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs (6,6): Fehler CS0246: Der Typ oder Namespacename 'TestClass' konnte nicht gefunden werden (fehlt eine using-Direktive oder eine Assemblyreferenz?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api .Tests.csproj] UnitTest1.cs (6,6): Fehler CS0246: Der Typ oder Namespace-Name 'TestClassAttribute' konnte nicht gefunden werden (sind Sie missi ng einer using Direktive oder eine Montagereferenz) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj]?

Offensichtlich ist dies, weil die Anordnung nicht auf dem Build-Server enthält, ist diese Namensräume (Microsoft.VisualStudio.QualityTools.UnitTestFramework), auf meinem lokalen Rechner befindet es unter C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PublicAssemblies \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll. Ich glaube, ich könnte die Baugruppe in meine Lösung kopieren, so dass es einen Teil der Code-Basis wird aber manuell Verschieben von Dateien fühlen sich wie ein bisschen einen unelegant Hack. Ich suchte auf nuget um und fand http://www.nuget.org/packages/Microsoft.VisualStudio.QualityTools.UnitTestFramework/, die ich den Trick dachte würde, aber installieren, das Paket konnte nicht mit:

Install-Paket: Kann nicht installieren Paket ‚Microsoft.VisualStudio.QualityTools.UnitTestFramework 11.0.50727.1‘ . Sie versuchen, dieses Paket in einem Projekt zu installieren, die ‘.NETFramework, Version = V4.5.2' zielt, aber das Paket enthält keine Montage Referenzen oder Content-Dateien, die mit diesem Rahmen kompatibel sind

Was ist meine beste Lösung? Ich bin überrascht, dass das Erstellen eines Testprojekts in VS2015 nicht automatisch alle Abhängigkeiten enthält, die ich brauche, obwohl ich vielleicht naiv bin (ich bin so etwas wie ein neuer Dot-Netter).

+3

Warum in aller Welt würde das jemand abschreiben? Es ist eine absolut gültige Frage. Ich bin ein unerfahrener .net-Entwickler, der, nachdem er einige Zeit gegoogelt hat und nirgendwohin gekommen ist, nach einer Anleitung zum Fortschritt sucht. Ist SO so elitär, dass ich das nicht darf? Ernst? – jamiet

+0

@jaimiet Ich hatte das gleiche Problem, auf Ihrem TeamCity Agent bauen Sie unter Mono unter Linux? Mono stellt diese Bibliothek nicht als Teil der Distribution zur Verfügung. Wenn es .NET unter Windows gibt, haben Sie ein paar Optionen, um es an Ort und Stelle zu bekommen. – TylerY86

Antwort

2

Hmm ich einige Ideen haben, so das wählen, das am besten zu Ihren Bedürfnissen passt

  1. Eine einfache Antwort sollte die DLL markieren sein lokal zu kopieren und einen Ordner wie Baugruppen im selben Ordner der Lösung verwenden und Referenzen "Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll“
  2. Installieren Sie Visual Studio in Ihrem Build-Server. Klingt verrückt, aber es ist in der Nähe von‚Entwickler-Maschine‘, die Sie haben.
  3. Installieren Sie den DLL in the GAC so müssen Sie sich nicht mit dieser stören.
  4. Fix die NuGet - Paket (Hinzufügen eines Verweises für die .NET Framework - Version) und verwenden Sie es
  5. Downgrade Ihre .NET Framework - Version, so dass Sie das NuGet - Paket verwenden können
  6. Erstellen Sie Ihren eigenen NuGet - Server (und fügen Sie den Verweis der DLLs, die Sie brauchen)

IMHO Ich würde die erste Antwort wählen, weil es der "beste Weg" zu sein scheint, NuGet zu verwenden, um alle Ihre Paketprobleme zu lösen, aber Sie verwenden eine DLL, von der Sie nicht wissen, ob sie vertrauenswürdig sein soll.

In System in "alten" Sprachen wie C oder C++ ist es üblich, dass Sie den Quellcode und die Bibliotheken herunterladen, damit der Code ausgeführt wird, also denke ich nicht, dass das NuGet-Paket die beste Lösung ist.

Mit der ersten Option haben Sie immer die gleiche Version und könnten das MD5 der Datei überprüfen und genau wissen, was auf Ihrem Build-Server läuft.

Vielleicht sollte die beste Option 6 sein. Wenn Sie Ihren eigenen NuGet-Server verwenden, um mit Ihren DLLs zu arbeiten, wird Ihr Leben noch beeindruckender und vertrauenswürdiger.

+2

Oder vermeiden Sie all diesen Horror, indem Sie xunit, nunit ... alles verwenden, was nicht von Microsoft ist. – Sam

+0

Ich stieß auf dieses Problem in ein paar Projekten, die ich selbst besitze, die tatsächlich NUnit verwenden, aber einige Referenzen kamen mit einigen der Testprojekte. Ich habe es erst bemerkt, als ich sie in unser TeamCity-System fallen ließ. –

2

Die Antwort ähnelt der Option 1 in eng.augusto's answer.
Microsoft stellt NuGet nicht für die neuste Version von Microsoft.VisualStudio.QualityTools.UnitTestFramework, bereit, aber Sie liefern es als ein Teil von Visual Studio C: \ Programme (X 86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ Public \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

ich den Ordner Microsoft.VisualStudio.QualityTools als Unterordner meiner Lösung erstellt und kopiert

Microsoft.VisualStudio.QualityTools.UnitTestFramework. dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml

Die Dateien sollten zur Quellcodeverwaltung hinzugefügt werden (auch wenn DLLs normalerweise ignoriert werden).
Dann habe ich Referenzen in meinem Test.csproj geändert, um auf einen neuen Standort zu verweisen.

+0

Das stimmt nicht. Siehe meine Antwort. – notlkk

+0

@notlkk: Wo ist deine Antwort?Ich habe es gesehen, aber jetzt ist es verschwunden. –

0

Für in VS 2017 erstellte Projekte. Hinzufügen des Nuget-Pakets Mit Microsoft.VisualStudio.QualityTools.UnitTestFramework.Updated können Komponententestprojekte auf CI erstellt werden, ohne dass VS auf dem Buildserver installiert ist.