Nano Hash - криптовалюты, майнинг, программирование

Распространение пользовательской задачи сборки MS с помощью .NET Standard и VS 2017 через Nuget

У меня есть стандартная библиотека .NET (1.4) VS 2017, которая содержит настраиваемую задачу MS Build (MyTask), которую необходимо распространять через пакет Nuget (скажем, MyCustomTask.dll, и она содержит MyTask и Portable.targets, которые будут импортированы по цели проект)

Этот пакет Nuget с настраиваемой задачей сборки затем используется целевым CSPRO-файлом проекта .NET Standard (1.4) для импорта Portable.targets, которые вызывают задачу настраиваемой сборки.

Однако в этот момент я продолжаю получать сообщение об ошибке сборки. Не удалось загрузить файл или сборку 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' или одну из ее зависимостей.

Я пробовал .NET Standard (1.4, 1.5 и 1.6), но та же ошибка.


Ответы:


1

Проблема заключается в том, что потребляющее приложение, в данном случае MSBuild.exe, должно включать все сборки пересылки, необходимые для выполнения задач сетевого стандарта (например, зависеть от библиотеки NETStandard.Library).

Лучшим решением в этом случае является мульти-нацеливание библиотеки задач на платформу .net и стандартную целевую платформу .net:

<TargetFrameworks>netstandard1.6;net46</TargetFrameworks>

Идея состоит в том, чтобы иметь 2 dll, которые будут содержать задачу. В файлах проекта, содержащихся в пакете NuGet, вместо использования пути dll непосредственно в <UsingTask> идея состоит в том, чтобы использовать другой dll-файл на основе свойства $(MSBuildRuntimeType), которое будет Core в версии .NET Core MSBuild:

<PropertyGroup>
  <_CustomTaskAssemblyTFM Condition="'$(MSBuildRuntimeType)' == 'Core'">netstandard1.6</_CustomTaskAssemblyTFM>
  <_CustomTaskAssemblyTFM Condition="'$(MSBuildRuntimeType)' != 'Core'">net46</_CustomTaskAssemblyTFM>
  <_CustomTaskAssembly>$(MSBuildThisFileDirectory)..\tools\$(_CustomTaskAssemblyTFM)\CustomTaskAssemblyName.dll</_CustomTaskAssembly>
</PropertyGroup>

<UsingTask TaskName="SomeCustomTask" AssemblyFile="$(_CustomTaskAssembly)" />

Вы можете увидеть примеры этого в ядре asp.net. инструменты сборки и .NET Основной пакет SDK.

24.05.2017
  • Спасибо за указание... Я рассмотрю примеры и вернусь к вам. 24.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..