2014-03-12 2 views
7

내 솔루션에는 여러 프로젝트가 있고 그 중 F # 프로젝트도 있습니다. 모든 Visual Studio에서 좋은 빌드,하지만 난 (VS가 설치되어 있지 않은) 내 인 TeamCity 서버에서 MSBuild를 함께 빌드 할 때 다음과 같은 빌드 오류가 발생합니다 : 내가 MSBuild를 도구 및 F 번호 프레임 워크를 설치 한FSharp 빌드가 MSBuild에서 실패하지만 Visual Studio에서 정상적으로 작동합니다.

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. 

을 내 TeamCity 서버에서,하지만 난 아직도 왜이 오류가 던져 모르겠다.

누군가이 오류를 발견하여 해결 방법에 대한 단서를 줄 수 있습니까? (나는 벌써 하루를 잃어 버렸다. 그리고 아직도 운이 없다).

+0

실제로 아래의 두 가지 답변이 도움이되었습니다. FSharpVersion을 4.3.0.0에서 버전으로 변경해야하므로 FSharp 프로젝트에 Clean target을 추가해야했습니다. 두 분 모두에게 감사드립니다! –

답변

10

우리는 AutoFixture.AutoFoq과 같은 문제가 있었다 및 ZeroToNine.

우리가 한 일은 .fsproj 파일을 수정하는 것이 었습니다.

먼저, 첫 번째 <PropertyGroup>

<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion> 

을 추가해야합니다.

둘째, 당신은이와

<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')" /> 

을 대체 :

<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)')" /> 

마지막으로, 교체

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

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

문맥 상 이것을 보려면 the ZeroToNine commit that does the above을 검토하십시오.

+0

당신이 이것에 좀 봐 줄 수 있다면 http://stackoverflow.com/questions/22357735/fsharp-project-build-fails-in-msbuild-in- teamcity 나는 확실히 당신이 차가운 두 사람 (비슷한 문제)을 소유하게 될 것입니다. –

+0

미안 해요, 나는 보았습니다. 그러나 나는 그 오류를 보지 못했습니다. –

+0

다른 문제가있었습니다.fsproj 파일이 표시되면서 업데이트되었지만 VS가 설치되지 않은 빌드 서버에서 오류가 발생했습니다. 나는 다른 컴퓨터에서 FSharp 폴더를 부정하고 복사하는 것을 끝내었다. – Benjol

2

당신은 당신의 프로젝트의 목표 "청소"를 만들 수 있습니다

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

또는이 같은 명령 줄 수정할 수 있습니다

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

이것은 실제로 필요했지만 FSharp.Core에는 몇 가지 문제가있었습니다 (@ Mark의 답변 참조). –

+0

예, 고맙습니다. 나는 매일 무언가를 배웁니다;) –

+0

또한이 문제에 대한 후속 조치를했습니다 : http://stackoverflow.com/questions/22357735/fsharp-project-build-fails-in-msbuild-in-teamcity. 당신이보고 싶다면, 나는 정말로 감사 할거야 :) –

0

오늘 빌드 서버에서 동일한 증상이 나타났습니다. 나를 위해 고쳐진 것은 빌드 서버에서 VS를 시작하고 F # 툴링을 설치 한 F # 프로젝트를 생성하는 것이 었습니다. 기본적으로 완전히 설치되지 않았습니다.

관련 문제