У меня есть решение dotNet Core, содержащее три проекта - один общий код, один веб-сервис «только для чтения» и один веб-сервис «администратор» (который имеет все маршруты POST, PUT и DELETE).Решение строится очень хорошо локально и работает.Я хочу построить оба проекта и запустить обе их операции публикации, чтобы сгенерировать выходные артефакты как часть TFS Gated Check-In.
У меня есть определение сборки в TFS (2017), которое включает в себя задачу dotnet build
в котором я указал два пути к файлам проекта и который имеет следующие параметры ...
/ p: AssemblyVersion = $ (Build.BuildNumber) /p:Version=$(Build.BuildNumber) /p: DeployOnBuild = True /p:PublishProfile=Dev.pubxml / p: AllowUntrustedCertificate = True / p: Configuration = $ (BuildConfiguration)
При запуске сборки не возникает проблем с первым проектом, которыйСборка просто отлично и корректно публикуется, но когда он пытается построить второй проект, возникает ошибка ...
Copyright (C) Microsoft Corporation. All rights reserved.
Restoring packages for e:\ci\builds\173\s\JMO.WebAPI\develop\JMOAdmin.WebAPI\JMOAdmin.WebAPI.csproj...
Restore completed in 23.62 ms for e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.DAL\JMO.DAL.csproj.
Restore completed in 78.55 ms for e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.WebAPI\JMO.WebAPI.csproj.
Restore completed in 34.6 ms for e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.WebAPI\JMO.WebAPI.csproj.
Generating MSBuild file e:\ci\builds\173\s\JMO.WebAPI\develop\JMOAdmin.WebAPI\obj\JMOAdmin.WebAPI.csproj.nuget.g.props.
Restore completed in 1.3 sec for e:\ci\builds\173\s\JMO.WebAPI\develop\JMOAdmin.WebAPI\JMOAdmin.WebAPI.csproj.
JMO.DAL -> e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.DAL\bin\dev\netcoreapp2.1\JMO.DAL.dll
CSC : error CS0006: Metadata file 'e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.WebAPI\publish\System.EnterpriseServices.Wrapper.dll' could not be found [e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.WebAPI\JMO.WebAPI.csproj]
Build FAILED.
CSC : error CS0006: Metadata file 'e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.WebAPI\publish\System.EnterpriseServices.Wrapper.dll' could not be found [e:\ci\builds\173\s\JMO.WebAPI\develop\JMO.WebAPI\JMO.WebAPI.csproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:03.71
Error: C:\Program Files\dotnet\dotnet.exe failed with return code: 1
Dotnet command failed with non-zero exit code on the following projects : e:\ci\builds\173\s\JMO.WebAPI\develop\JMOAdmin.WebAPI\JMOAdmin.WebAPI.csproj
Но вот в чем дело, если я поменяю порядок проектов вЗадача это все еще второй проект, который не удается построить.Более того, если я добавляю вторую задачу сборки dotnet, чтобы для каждого проекта была одна, она все равно делает то же самое - вторая сборка завершается с той же ошибкой, независимо от того, какой фактический проект компилируется первым.То же самое применимо, если я использую подстановочный знак для имен файлов проекта.
Еще одна вещь, на которую следует обратить внимание: файл, указанный в ошибке (System.EnterpriseServices.Wrapper.dll), не найден ни в одной из сборок.В любом случае, путь вывода независимо от того, успешно ли выполняется сборка!
Единственный способ, с помощью которого я нашел успешную сборку обоих проектов, - это использовать параметр MultiConfiguration
со значением Pass1, Pass2 и включить /отключите задачи сборки, чтобы в процессе выполнялось два полных прохода, один для WS «только для чтения» и один для WS администратора.Я предполагаю, что что-то застревает в памяти во время первого процесса сборки проекта, и оно срабатывает во втором, но я пока не могу доказать это.
Моя проблема с этим решением состоит в том, что это работает только наветвь разработки, в ветке релиза мне нужно использовать опцию мультиконфигурации для целевого назначения - различных целевых сред (test, uat, prod).
Если не установить расширение TFS для цепных сборок (не идеальный, но жизнеспособный), кто-нибудь может подсказать, почему у меня такое поведение, и, что более важно, предложить лучшее решение.
Приветствия.