Как указать выходной каталог для двоичных файлов Nuget? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть пакет nuget, в котором есть файлы .dll, которые он автоматически копирует в каталог при компиляции программы. Есть ли способ указать, куда будут копироваться файлы dll?

Я знаю, что можно изменить файл .targets пакета, но предположим, что у меня нет доступа к пакету. Проект управляется через git, поэтому я бы предпочел не распространять двоичные файлы вместе с лицензиями, включенными в пакет. В настоящее время, когда кто-то загружает / компилирует исходный код, пакет nuget автоматически загружается через восстановление nuget. Есть ли способ переопределить файл .targets пакета?

Я бы предпочел не использовать сценарии для управления файлами dll, если это возможно. Также это относится к проекту на C ++, и я знаю, что в nuget есть ограничения на основе используемых языков.

1 Ответ

1 голос
/ 11 февраля 2020

Если ваш вопрос спрашивает, есть ли простой файл конфигурации или что-то подобное, где вы можете написать «скопировать содержимое пакета X в папку Y», то нет.

Для большинства людей разница между различными Компоненты в системе сборки не важны, поэтому для них не имеет значения, копирует ли что-то NuGet, копирует ли SDK своего проекта или MSBuild. Однако, поскольку вы сейчас пытаетесь сделать что-то более продвинутое, эти различия могут быть важными. NuGet только записывает / копирует файлы при восстановлении (и, следовательно, только в папку пакетов, а не в папку вывода проекта), но после восстановления NuGet вообще не запускается. NuGet просто сообщает файлы остальной части системы сборки, и эти компоненты отвечают за решение, что делать. Например, куда копировать файлы.

Поскольку в проектах C ++ и. NET используется MSBuild, могут использоваться одни и те же методы отладки. Из «командной строки разработчика» создайте свой проект с помощью переключателя -bl, чтобы создать файл «msbuild.binlog». Вы можете открыть этот файл с помощью MSBuild структурированного журнала . Затем вы можете использовать поиск, чтобы найти, где в сборке копируется каждая dll и каковы аргументы копирования (включая место назначения). Вы также можете посмотреть, где был создан элемент, который определил файл для копирования. Затем вы можете записать цель MSBuild в ваш файл проекта (или другой файл, который импортируется вашим файлом проекта), который запускается в соответствующее время и обновляет элемент, чтобы указать место назначения, в которое вы хотите скопировать файл. Но MSBuild - это язык сценариев, и вы сказали, что не хотите писать сценарий, поэтому вам может не понравиться такой подход. И если вы еще не знакомы со сценариями MSBuild, это, вероятно, больше усилий, чем написание сценария PowerShell. Но, по крайней мере, это произойдет автоматически как часть сборки (и, следовательно, произойдет при сборке и отладке в Visual Studio), а не как какой-то другой процесс, который нужно запускать вручную.

...