Почему «Не удалось найти сборку «System.IdentityModel.Services» в агенте Ubuntu, но не в агенте Windows?

Короче говоря, мне удалось успешно создать проект 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.

скриншот моего конвейера сборки:

learn.microsoft.com/en-us/dotnet/api/… WIF и его пространства имен относятся только к .NET Framework. Другими словами, только Windows.

Lex Li 25.12.2020 20:00

@LexLi о боже, по-другому нельзя? Я был просто счастлив, что сборка наконец-то заработала на Ubuntu после месяца попыток :(

Cataster 25.12.2020 20:38

Вы можете попробовать использовать указанный пакет NuGet для сборок, github.com/Microsoft/dotnet/tree/master/releases/…, но все же Windows — лучший вариант.

Lex Li 25.12.2020 20:41

@LexLi проблема в том, что сборка Windows занимает около 7 минут, это слишком долго, особенно когда мне нужно отлаживать сборку. Для сравнения Ubuntu занимает 3 минуты, поэтому я хочу использовать Ubuntu

Cataster 25.12.2020 21:07

@LexLi Разобрался!!! :) Проверить ответ

Cataster 04.01.2021 22:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
849
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Мы могли бы проверить установленное программное обеспечение для каждого размещенного агента, мы видим, что агент 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 для более быстрого времени сборки :(

Cataster 28.12.2020 08:23

Привет, я обновил ответ, вы можете проверить обновление1, я рекомендую вам использовать агент, размещенный в Windows, вместо агента, размещенного в Ubuntu.

Vito Liu 28.12.2020 09:08

Привет, Вито, я пробовал некоторые обходные пути отсюда, такие как добавление <PackageReference Include = "Microsoft.NETFramework.ReferenceAssemblies" Version = "1.0.0" PrivateAssets = "All" /> в файл csproj, но это не помогло. Кроме того, я не могу сам обновить проект до ядра .NET, так как на самом деле я его не создавал, мне просто поручили построить конвейер CI, вот и все.

Cataster 31.12.2020 08:32

Вы также можете попробовать установить собственный агент, а затем запустить его на локальном агенте. И агент Windows все еще лучший вариант.

Vito Liu 31.12.2020 08:42

Да, я тоже предпочитаю Windows, но это слишком медленно... в настоящее время сборка занимает 7 минут. Для сравнения, в Ubuntu это занимает 2 минуты. Это ОГРОМНАЯ разница

Cataster 31.12.2020 18:02
Ответ принят как подходящий

Разобрался благодаря этому посту здесь:

Добавьте этот скрипт/строки в файл .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!!! Просто посмотрите на эти различия в длительности,

  • 2,5 минуты на Ubuntu 20
  • 8,5 минут на Windows 2019

безумный!

Несколько комментариев: 1) Обычно людей мало волнует, сколько времени займет конвейер CI/CD. Интересно, что занимает так много времени в Windows, и вы можете использовать бинарный журнал MSBuild, чтобы копать дальше, msbuildlog.com 2) Несмотря на то, что вы можете собрать Ubuntu с указанным пакетом сборок, я не думаю, что есть какие-либо модульные тесты. там можно выполнить. Это еще не действительная установка CI/CD.

Lex Li 05.01.2021 01:07

@LexLi это хорошие моменты, 1-й момент, чем быстрее время сборки, тем быстрее я могу отлаживать конвейер сборки, когда я создаю его в первый раз. Теперь, когда я закончил части сборки, следующей задачей, которую нужно добавить, является публикация артефактов AngularOutput в веб-службе Azure. Если у меня возникнут проблемы, и он работает в Windows, мне придется ждать 8 минут каждый раз, когда я должен отлаживать/пробовать и ошибаться в разных сценариях, по сравнению с 2 минутами. Что касается 2-го пункта, это может быть правдой, но разработчик проекта сказал мне, что нам не нужно создавать тестовые файлы, так как я не думаю, что у них есть какие-либо тесты.

Cataster 05.01.2021 01:56

Другие вопросы по теме