В моем решении есть несколько проектов, в том числе проект F #. В Visual Studio все работает нормально, но когда я пытаюсь собрать его с помощью MSBuild на моем сервере TeamCity (на котором не установлен VS), возникает следующая ошибка сборки:
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.
Я установил MSBuild Tools и платформу F # на свой сервер TeamCity, но до сих пор не знаю, почему возникает эта ошибка.
Кто-нибудь сталкивался с этой ошибкой и может дать мне несколько подсказок, как ее исправить? (Я уже потерял день и все равно не везет).
3 ответа
У нас была такая же проблема с AutoFixture.AutoFoq и ZeroToNine.
Мы изменили файлы .fsproj.
Сначала вам нужно добавить
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
К первому <PropertyGroup>
.
Во-вторых, вы заменяете
<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">
Если вы хотите увидеть это в контексте, вы можете просмотреть коммит ZeroToNine, который выполняет вышеуказанное.
Вы можете создать цель «Очистить» в своем проекте:
<Target Name="Clean">
<MSBuild
Targets="Clean"
Projects=".\MySolutionDir\MySol.sln"
Properties="Configuration=$(Configuration)" />
</Target>
Или вы можете изменить командную строку примерно так:
MSBuild MyProj.proj /p:Configuration=Release;Targets=Clean
Сегодня у меня была проблема с теми же симптомами на моем сервере сборки. Что исправило для меня, так это запуск VS на сервере сборки и создание проекта F #, который установил инструменты F #. По умолчанию он не был установлен полностью.
Похожие вопросы
Связанные вопросы
Новые вопросы
visual-studio
Используйте этот тег, если у вас есть определенный вопрос о функциях и функциональности Visual Studio. Не используйте этот тег по вопросам, касающимся кода, который просто случился, чтобы написано в Visual Studio. Подумайте о том, чтобы пометить точную область технологии Вашего вопроса Ссылки, а также помечения более конкретной версии Visual Studio. Пожалуйста, укажите вашу точную версию VS, выпуск и уровень обновления в своем вопросе. Не используйте этот тег на вопросы относительно кода VS.