Короче говоря, мне удалось успешно создать проект bitbucket .NET/MVC/Angular на лазурном хосте Windows 2019, а также на агенте ubuntu. Причина, по которой я хочу собрать его на Ubuntu, заключается в том, что я заметил, что время сборки намного быстрее, чем у агента Windows, что имеет смысл, учитывая платформы.
Я сталкиваюсь с этим предупреждением на лазурном агенте Ubuntu 20:
warning MSB3245: Could not resolve this reference. Could not locate the assembly "System.IdentityModel.Services". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
Я не получаю это предупреждение в агенте Windows 2019, и я вижу, что ссылка уже включена в файл .csproj
:
<Reference Include = "System.IdentityModel.Services" />
и следующие пакеты в файле packages.config
<package id = "Microsoft.IdentityModel.JsonWebTokens" version = "5.2.4" targetFramework = "net471" />
<package id = "Microsoft.IdentityModel.Logging" version = "5.2.4" targetFramework = "net471" />
<package id = "Microsoft.IdentityModel.Protocols" version = "5.2.4" targetFramework = "net471" />
<package id = "Microsoft.IdentityModel.Protocols.OpenIdConnect" version = "5.2.4" targetFramework = "net471" />
<package id = "Microsoft.IdentityModel.Tokens" version = "5.2.4" targetFramework = "net471" />
Хотя сборка работает нормально, мне любопытно устранить это предупреждение в агенте Ubuntu, поскольку оно не отображается в агенте Windows 2019.
скриншот моего конвейера сборки:
@LexLi о боже, по-другому нельзя? Я был просто счастлив, что сборка наконец-то заработала на Ubuntu после месяца попыток :(
Вы можете попробовать использовать указанный пакет NuGet для сборок, github.com/Microsoft/dotnet/tree/master/releases/…, но все же Windows — лучший вариант.
@LexLi проблема в том, что сборка Windows занимает около 7 минут, это слишком долго, особенно когда мне нужно отлаживать сборку. Для сравнения Ubuntu занимает 3 минуты, поэтому я хочу использовать Ubuntu
@LexLi Разобрался!!! :) Проверить ответ
Мы могли бы проверить установленное программное обеспечение для каждого размещенного агента, мы видим, что агент Windows 2019 установил .NET Framework 4.7.2 4.8 и не установлен на размещенном агенте Ubuntu 20 Azure.
Ошибка MSB3245 является типичным предупреждением/ошибкой, когда указанная сборка не может быть найдена или не может быть загружена. System.IdentityModel.Services
— это сборка в .NET Framework. Согласно документу : .NET Framework — это версия .NET только для Windows для создания приложений любого типа, работающих в Windows.
Обновление1
Мы могли видеть, что размещенный агент Ubuntu 20 установлен .NET Core SDK
. Если вы хотите использовать размещенный агент Ubuntu, вы можете обратиться к этому документу для переноса с .NET Framework
на .NET Core
, после чего мы сможем запустить код на Ubuntu hosted agent
Примечание. Путь будет долгим и трудным, мы по-прежнему рекомендуем вам использовать хост-агент Windows.
Ясно, так что нет никакого способа заставить это работать на Ubuntu? Я потратил так много времени на исправление еще одной проблемы с VBCSCompiler в агенте Ubuntu, чтобы сборка наконец завершилась успешно, было бы обескураживающе, если это предупреждение о службах идентификации не может быть разрешено после всех проблем, через которые я прошел, чтобы использовать Ubuntu для более быстрого времени сборки :(
Привет, я обновил ответ, вы можете проверить обновление1, я рекомендую вам использовать агент, размещенный в Windows, вместо агента, размещенного в Ubuntu.
Привет, Вито, я пробовал некоторые обходные пути отсюда, такие как добавление <PackageReference Include = "Microsoft.NETFramework.ReferenceAssemblies" Version = "1.0.0" PrivateAssets = "All" />
в файл csproj, но это не помогло. Кроме того, я не могу сам обновить проект до ядра .NET, так как на самом деле я его не создавал, мне просто поручили построить конвейер CI, вот и все.
Вы также можете попробовать установить собственный агент, а затем запустить его на локальном агенте. И агент Windows все еще лучший вариант.
Да, я тоже предпочитаю Windows, но это слишком медленно... в настоящее время сборка занимает 7 минут. Для сравнения, в Ubuntu это занимает 2 минуты. Это ОГРОМНАЯ разница
Разобрался благодаря этому посту здесь:
Добавьте этот скрипт/строки в файл .csproj
:
<Import Project = "..\packages\Microsoft.NETFramework.ReferenceAssemblies.net471.1.0.0\build\Microsoft.NETFramework.ReferenceAssemblies.net471.targets" Condition = "Exists('..\packages\Microsoft.NETFramework.ReferenceAssemblies.net471.1.0.0\build\Microsoft.NETFramework.ReferenceAssemblies.net471.targets')" />
<Target Name = "EnsureNuGetPackageBuildImports" BeforeTargets = "PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition = "!Exists('..\packages\Microsoft.NETFramework.ReferenceAssemblies.net471.1.0.0\build\Microsoft.NETFramework.ReferenceAssemblies.net471.targets')" Text = "$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.NETFramework.ReferenceAssemblies.net471.1.0.0\build\Microsoft.NETFramework.ReferenceAssemblies.net471.targets'))" />
</Target>
Кроме того, вам также необходимо добавить такой контент в файл packages.config:
<package id = "Microsoft.NETFramework.ReferenceAssemblies" version = "1.0.0" targetFramework = "net471" developmentDependency = "true" />
<package id = "Microsoft.NETFramework.ReferenceAssemblies.net471" version = "1.0.0" targetFramework = "net471" developmentDependency = "true" />
и с этим он теперь прекрасно работает на Ubuntu!!! Просто посмотрите на эти различия в длительности,
безумный!
Несколько комментариев: 1) Обычно людей мало волнует, сколько времени займет конвейер CI/CD. Интересно, что занимает так много времени в Windows, и вы можете использовать бинарный журнал MSBuild, чтобы копать дальше, msbuildlog.com 2) Несмотря на то, что вы можете собрать Ubuntu с указанным пакетом сборок, я не думаю, что есть какие-либо модульные тесты. там можно выполнить. Это еще не действительная установка CI/CD.
@LexLi это хорошие моменты, 1-й момент, чем быстрее время сборки, тем быстрее я могу отлаживать конвейер сборки, когда я создаю его в первый раз. Теперь, когда я закончил части сборки, следующей задачей, которую нужно добавить, является публикация артефактов AngularOutput в веб-службе Azure. Если у меня возникнут проблемы, и он работает в Windows, мне придется ждать 8 минут каждый раз, когда я должен отлаживать/пробовать и ошибаться в разных сценариях, по сравнению с 2 минутами. Что касается 2-го пункта, это может быть правдой, но разработчик проекта сказал мне, что нам не нужно создавать тестовые файлы, так как я не думаю, что у них есть какие-либо тесты.
learn.microsoft.com/en-us/dotnet/api/… WIF и его пространства имен относятся только к .NET Framework. Другими словами, только Windows.