Использование SqlClient в задаче MSBuild для netcoreapp2.1 - PullRequest
0 голосов
/ 13 мая 2018

Я написал задачу MSBuild, например , эту , но у меня есть ссылка на System.Data.SqlClient.

Поэтому я использую dotnet publish для нацеливания на конкретную структуру netcoreapp2.0 дляполучить зависимости в каталоге bin.

Проблема в том, что когда я запускаю задачу через скрипт msbuild, я получаю: error : System.Data.SqlClient is not supported on this platform.

Механизм сборки: Microsoft (R) Build Engine version 15.7.177.53362 for .NET Core.

Вот полный (задание и тест) проект

Csproj:

<Project DefaultTargets="Build">
  <UsingTask TaskName="TestTasks.TestSqlClient" AssemblyFile=".\Task\bin\Debug\netcoreapp2.0\publish\TestTask.dll" />
  <Target Name="Build">
    <TestSqlClient />
  </Target>
</Project>

список файлов и папок в bin\netcoreapp2.0\publish:

|   Microsoft.Build.Framework.dll
|   Microsoft.Build.Utilities.Core.dll
|   System.Data.SqlClient.dll
|   System.Text.Encoding.CodePages.dll
|   TestTask.deps.json
|   TestTask.dll
|   TestTask.pdb
|
\---runtimes
    +---unix
    |   \---lib
    |       \---netstandard2.0
    |               System.Data.SqlClient.dll
    |
    +---win
    |   \---lib
    |       +---netcoreapp2.0
    |       |       System.Text.Encoding.CodePages.dll
    |       |
    |       \---netstandard2.0
    |               System.Data.SqlClient.dll
    |
    +---win-arm64
    |   \---native
    |           sni.dll
    |
    +---win-x64
    |   \---native
    |           sni.dll
    |
    \---win-x86
        \---native
                sni.dll

1 Ответ

0 голосов
/ 13 мая 2018

Похоже, вы столкнулись с https://github.com/Microsoft/msbuild/issues/1887. Одним из текущих ограничений использования зависимостей из задач MSBuild является то, что MSBuild не будет загружать собственные зависимости. Как вы можете видеть в выходных данных, есть папка «runtimes», которая содержит sni.dll для x86, x64 и других. Единственный способ обойти это в .NET Core - вручную разрешить собственные зависимости, используя контекст загрузки сборки. Это очень сложно сделать правильно, и я не рекомендую это делать. Подробнее см. https://natemcmaster.com/blog/2017/11/11/msbuild-task-with-dependencies/.

Более простой обходной путь - реализовать ваш инструмент как консольный инструмент. Затем используйте цель и задачу Exec или настраиваемую реализацию ToolTask, чтобы запустить инструмент консоли во время сборки. Вот как работает сам компилятор C #, и я описал этот подход более подробно здесь: https://natemcmaster.com/blog/2017/11/11/build-tools-in-nuget/. Кроме того, см. https://github.com/natemcmaster/Yarn.MSBuild для реального примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...