2017-10-06 5 views
0

Ich konvertiere ein Projekt in das neue .csproj Format und stelle es so ein, dass es sowohl auf netstandard2.0 als auch auf net45 abzielt. Es funktioniert gut auf meinem Rechner, aber irgendwie scheitert es auf unserem Build-Server beim Versuch, für netstandard2.0 zu bauen. Der Build für net45 läuft ohne Fehler. Ein Teil des Stammes:.Net Standard 2.0 Build schlägt auf Teamcity fehl

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\bin\Roslyn\csc.exe <lots of parameters> 
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\bin\Roslyn 
error CS0234: The type or namespace name 'Serialization' does not exist in the namespace 'System.Runtime' (are you missing an assembly reference?) 
error CS0246: The type or namespace name 'BinaryFormatter' could not be found (are you missing a using directive or an assembly reference?) 
error CS0246: The type or namespace name 'ICloneable' could not be found (are you missing a using directive or an assembly reference?) 

Ich bin mir bewusst, dass diese Arten nicht vor gibt es auf Version 2.0, aber es ist unklar, wie es sie nicht findet. .Net Core 2.0 SDK scheint auf dem Build-Server installiert zu sein, außerdem habe ich versucht, es mit niedrigeren Versionen des SDK auszuführen, und es wurde mir explizit gesagt, dass ich eine andere Version des Standards als Ziel haben sollte. Soweit ich weiß, sind seit der Version 2.0 keine expliziten Abhängigkeiten von der Standardbibliothek in der Projektdatei erforderlich.

Was könnte der Grund für diese Fehler sein?

Wir verwenden ein MsBuild-Skript von Teamcity ausgeführt MsBuild build runner mit ToolsVersion = 15.0.

+0

Ist ein NuGet vor dem msbuild Aufruf ausgeführt restore (zB 'msbuild/t: Restore') –

+0

Ja, wir verwenden einen eingebauten -in MsBuild target 'restore' in der Lösungsdatei.Er führt alle Arbeiten an einem sauberen Repo auf meinem Rechner durch – holdn

+0

enthält die" Menge der Parameter "einen Verweis auf' netstandard.dll'? mindestens sollte 'ICloneable' definiert werden dort –

Antwort

1

Ok, ich schein die Antwort selbst gefunden zu haben.

MsBuild-Runner verwendet SDK, das als Teil von Visual Studio zum Erstellen installiert wurde, und VS fügt nur die korrekte Unterstützung für .NET Core 2.0 SDK in Version 15.3 hinzu. Einige frühere Versionen wurden auf dem Build-Server installiert. Die Fehler wurden dadurch verursacht, dass das richtige SDK nicht aufgelöst werden konnte und stattdessen DLLs aus älteren Versionen verwendet wurden. Einer der Parameter, die an den Compiler übergeben wurden (beachten Sie die Version des Standards): reference:C:\Users\buildserver\.nuget\packages\system.runtim‌​e\4.3.0\ref\netstand‌​ard1.5\System.Runtim‌​e.dll /.

Eine Möglichkeit, dies zu lösen, wäre, Visual Studio auf dem Build-Server auf Version 15.3 zu aktualisieren. Ich stieg mit der Problemumgehung in this answer aus.

Verwandte Themen