Nuget: как использовать файлы в папке инструментов в целевом приложении?

Я добавил инструмент сборки EXE в папку инструментов моего nuspec, и он правильно добавлен в целевое приложение в папке \packages\xxx\tools.

Но мне нужно вызвать этот файл как действие сборки в целевом проекте. Как правильно на него ссылаться? Имейте в виду, что с каждой новой версией пакета имя папки внутри \packages\ будет меняться. Поэтому я не могу жестко закодировать это.


person Paymon    schedule 27.04.2017    source источник
comment
Вы когда-нибудь находили ответ на этот вопрос?   -  person Devedse    schedule 25.07.2017
comment
Мне нужно вызвать этот файл как действие сборки: вы имеете в виду шаг до сборки/после сборки? Если вам нужно установить действие сборки для файла, вы можете указать его вручную. См. документацию и найдите buildAction.   -  person techvice    schedule 08.12.2017
comment
@techvice, у меня был этап после сборки, но проблема заключалась в отправке обновленного EXE-файла через Nuget так же, как доставляется любое другое обновление пакета.   -  person Paymon    schedule 12.03.2018
comment
@Devedse, я опубликовал свое решение в качестве ответа.   -  person Paymon    schedule 12.03.2018


Ответы (1)


В моем случае была такая ситуация:

  • Целевым проектом было приложение .NET Core.
  • EXE-файл не был .NET Core и должен был оставаться EXE

Я придумал обходной путь:

  1. Создал проект DLL консольного приложения (ядро .NET) и добавил в него файл EXE в качестве встроенного ресурса.
  2. Создал обычный пакет NuGet для нового файла DLL.
  3. В целевых приложениях я ссылался на этот пакет (dll), поэтому все будущие версии будут обновляться обычным способом NuGet.
  4. В целевом приложении я добавил событие после сборки для запуска dll-файла:

    dotnet TheDllName.dll

    Упаковал DLL-файл обычным способом и ссылается на него в целевом приложении. В который отправляется в обычном режиме. Каждый раз, когда пакет NuGet обновляется, новый EXE-файл также будет распространяться внутри DLL. Затем я использовал команду

Что происходит при запуске библиотеки DLL?

  1. Читает EXE-файл из себя, как и любой другой встроенный ресурс.
  2. Сохраняет на диск как EXE файл.
  3. Запускает новый процесс для запуска EXE-файла.

Оптимизация

Это не обязательно, но для оптимизации описанного выше процесса я также добавил файл версии (простой текстовый файл с именем ver.txt) для записи номера версии EXE-файла, поэтому я извлекаю и сохраняю его только один раз для каждого обновленного пакета NuGet. .

person Paymon    schedule 12.03.2018