2014-03-12 6 views
7

Ich habe eine Reihe von Projekten in meiner Lösung, unter denen auch ein F # -Projekt. Alles baut sich in Visual Studio in Ordnung, aber wenn ich versuche, es auf meinem Teamcity-Server mit MSBuild zu bauen (die nicht VS nicht installiert) wirft es die folgenden Buildfehler:FSharp Build schlägt in MSBuild fehl, funktioniert aber in Visual Studio einwandfrei

C:\TeamCity\buildAgent\work\42c74d8b9d19a844\FSharpEngine\MY_FSHARP_PROJECT.fsproj : error MSB4057: The target "Clean" does not exist in the project. 
[16:27:58]Done Building Project "C:\TeamCity\buildAgent\work\42c74d8b9d19a844\Folder0\MY_FSHARP_PROJECT.fsproj" (Clean target(s)) -- FAILED. 
[16:27:58]Done Building Project "C:\TeamCity\buildAgent\work\42c74d8b9d19a844\Folder1\REFERENCING_FSHARP_PROJECT.csproj" (Clean target(s)) -- FAILED. 
[16:27:58]Done Building Project "C:\TeamCity\buildAgent\work\42c74d8b9d19a844\Folder2\UPPER_REFERENCING_FSHARP_PROJECT.csproj" (Rebuild target(s)) -- FAILED. 
[16:27:58]Done Building Project "C:\TeamCity\buildAgent\work\42c74d8b9d19a844\Folder4\UPPER_UPPER_REFERENCING_FSHARP_PROJECT.csproj.metaproj" (Rebuild target(s)) -- FAILED. 
[16:27:58]Done Building Project "C:\TeamCity\buildAgent\work\42c74d8b9d19a844\MY_SOLUTION.sln" (Rebuild target(s)) -- FAILED. 
[16:27:58]Done Building Project "C:\TeamCity\buildAgent\work\42c74d8b9d19a844\MY_SOLUTION.sln.teamcity" (TeamCity_Generated_Build target(s)) -- FAILED. 

Ich habe installiert MSBuild Werkzeuge und F # Rahmen auf meinem TeamCity-Server, aber ich weiß immer noch nicht, warum dieser Fehler ausgelöst wird.

Ist jemand auf diesen Fehler gestoßen und kann mir Hinweise geben, wie er zu beheben ist? (Ich habe schon einen Tag verloren und immer noch kein Glück).

+0

Tatsächlich halfen die beiden untenstehenden Antworten: da ich die FSharpVersion von 4.3.0.0 auf Version umstellen musste und ich das Clean-Target zum FSharp-Projekt hinzufügen musste. Vielen Dank an euch beide! –

Antwort

10

Wir mit AutoFixture.AutoFoq hatte das gleiche Problem und ZeroToNine.

Wir haben die .fsproj-Dateien geändert.

Zuerst müssen Sie

<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion> 

zur ersten <PropertyGroup> hinzuzufügen.

Zweitens Sie

<Import Project="$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets" Condition=" Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')" /> 

mit diesem ersetzen:

<Choose> 
    <When Condition="'$(VisualStudioVersion)' == '11.0'"> 
    <PropertyGroup> 
     <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath> 
    </PropertyGroup> 
    </When> 
    <Otherwise> 
    <PropertyGroup> 
     <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath> 
    </PropertyGroup> 
    </Otherwise> 
</Choose> 
<Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" /> 

Schließlich ersetzen

<Reference Include="FSharp.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> 

mit

<Reference Include="FSharp.Core, Version=$(TargetFSharpCoreVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> 

Wenn Sie dies im Zusammenhang sehen möchten, können Sie the ZeroToNine commit that does the above überprüfen.

+0

Wenn du dir das mal anschauen könntest http://stackoverflow.com/questions/22357735/fsharp-project-build-fails-in-msbuild-in- teamcity Ich würde euch bestimmt ein paar kalte haben (ähnliches Problem) –

+0

Sorry, ich habe geschaut, aber ich habe diesen Fehler vorher nicht gesehen (und es klingelt auch nicht). –

+0

Ich hatte ein anderes Problem.Die fsproj-Datei wurde aktualisiert, während Sie zeigen, aber ich bekam den Fehler auf meinem Build-Server, wo VS nicht installiert war. Ich habe schließlich den FSharp-Ordner von einem anderen Computer betrogen und kopiert. – Benjol

2

Sie können das Ziel „Clean“ in Ihrem Projekt erstellen:

<Target Name="Clean"> 
    <MSBuild 
    Targets="Clean" 
    Projects=".\MySolutionDir\MySol.sln" 
    Properties="Configuration=$(Configuration)" /> 
</Target> 

Oder Sie können die Befehlszeile so etwas wie dies ändern:

MSBuild MyProj.proj /p:Configuration=Release;Targets=Clean 
+0

Dies wurde in der Tat benötigt, aber es gab auch einige Probleme mit der FSharp.Core (siehe @ Marks Antwort). –

+0

Ja, ich habe es bemerkt, danke. Ich lerne jeden Tag etwas;) –

+0

Auch eine Follow-up dieses Problems hier gemacht: http://stackoverflow.com/questions/22357735/fsharp-project-build-fails-in-msbuild-in-teamcity. Wenn du einen Blick darauf werfen willst, wäre ich echt dankbar :) –

0

Ich hatte heute ein Problem mit den gleichen Symptomen auf meinem Build-Server. Was es für mich behob, war VS auf dem Build-Server zu starten und ein F # -Projekt zu erstellen, das die F # -Werkzeuge installierte. Es wurde nicht standardmäßig vollständig installiert.

Verwandte Themen