Как создать стандартную. net и автономную сборку. net framework? - PullRequest
1 голос
/ 27 января 2020

Моя цель - создать выходные данные сборки, которые будут работать как переносимая версия моего приложения, содержащая не-фреймворковые зависимости (nuget + projects) непосредственно в виде dll.

Это демонстрирует решение и четыре проекта, содержащиеся в нем. :

enter image description here

Вы можете видеть библиотеки. net standard 2.0, когда используется консольное приложение (для запуска / отладки некоторого кода). net framework 4.7.2 (потому что у нас здесь есть некоторые приложения. net framework). Стрелки на изображении показывают ссылки, которые были установлены. Части библиотек (не консольное приложение) могут быть импортированы на сервер MS sql в будущем; этот импорт обычно выбирает все зависимости из одной и той же папки, если она доступна (что является причиной автономного вывода).

Проблема A: Запуск кода на linux / mono

Используя Jetbrains Rider, чтобы открыть решение, пакеты build + restore будут работать без проблем. Запуск консольного приложения будет работать до некоторой степени (например, загрузка данных из SQL) до тех пор, пока не произойдет сбой при вызове некоторого кода, использующего BouncyCastle (исключение dll не найдено).

Просмотр результатов сборки показывает три .dll-файлы моих lib-проектов вместе с .exe-файлом console-app плюс все .pdb-файлы И дополнительно System.Data.SqlClient.dll. Кажется, это может быть причиной того, что мой sql код работал.

Проблема B: Запуск кода на win10. net Framework / Core установлен

Использование VS / Райдер тут без разницы, открыл решение, восстановил пакеты + собрал без проблем. Запустить консольное приложение не удалось раньше, чем раньше: на этот раз ему не удалось найти Syste.Data.SqlClient.dll. Проверка папки сборки показывает мои три lib-dll и .exe, включая файлы .pdb, больше ничего.

Насколько я понимаю, файлы должны быть либо в GA C, либо внутри одной и той же папки для их можно найти. Кажется, когда зависимость стандартной библиотеки. net включает пакеты nuget, что-то вызывает проблемы с загрузкой их в GA C или, по крайней мере, копированием их в каталог сборки (что, я думаю, устарело). Таким образом, даже если мой подход (наличие версии моего приложения portable-i sh / автономная) может быть необычным или даже глупым, я бы подумал, что простой запуск этого кода на dev-машине должен работать нормально.

Проблема C: Включение зависимостей в выходные данные сборки

Согласно информации, которую я нашел здесь , свойство <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> можно использовать для зависимости копируются в каталог сборки. И хотя кажется, что это копирует слишком много файлов (пытались исключить некоторые файлы в соответствии с docs ), он действительно копирует файлы .dll для полного пакета при сборке проекта ExchangeIntegration (. net стандарт 2.0) , Поиск того же самого для. net framework .csproj проектов дал смешанные результаты. Я играл с настройкой copy-local и наткнулся на похожие проблемы при создании пакетов nuget и использовании файлов .targets , но безуспешно.

О специфицированных c используемых библиотеках Меня больше интересует изучение правильной концепции для решения этой проблемы, на самом деле дело не в том, имеет ли смысл импортировать Newtonsoft. Json на сервер MS sql. Я чувствую, что по сути чего-то упускаю; возможно, библиотека выходных типов не подходит для моей цели, или я смешиваю проблемные c. net версии, хотя я сделал быструю проверку, и, кажется, все в порядке .

Как получить сборку. net framework (console-app), которая содержит все не-фреймворковые зависимости (например, nuget) И отдельную сборку. net standard (library), которая также содержит все не-фреймворки зависимости?

РЕДАКТИРОВАТЬ: добавление всех пакетов nuget в проект верхнего уровня (в моем примере это console-app), похоже, решает проблему, код выполняется без проблем. Я все еще жду правильного решения.

EDIT2: добавлена ​​версия моно / msbuild, используемая под arch: 16.4 enter image description here

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