Как выполнить собственный скрипт при установке пакета nuget? - PullRequest
0 голосов
/ 29 января 2019

Я создал этот проект https://github.com/RemiBou/RemiBou.CosmosDB.Migration, для работы ему нужно, чтобы пользователь сделал 2 вещи: создайте соответствующие папки и отредактируйте csproj так, чтобы файл внутри этих папок был внедрен.

Прежде чем мы сможемделать это автоматически при установке с помощью install.ps1, но эта функция устарела.Вы знаете, как я мог это сделать?

1 Ответ

0 голосов
/ 30 января 2019

install.ps1 точно не рекомендуется, но это особенность, уникальная для packages.config.PackageReference не имеет концепции установки, так как любой может просто отредактировать csproj и добавить PackageReference.Когда вы восстанавливаете, NuGet не может узнать, происходит ли это в первый раз, когда пакет восстанавливается для проекта после добавления ссылки, или это первый раз, когда проект восстанавливается с чистым репозиторием (после «msbuild /»).t: clean "или" git clone ", например).

Я не знаю альтернативы для создания папок, кроме наличия документации, в которой говорится, что соглашение заключается в использовании этого имени папки.Но альтернативой модификации csproj является использование того факта, что MSBuild является универсальной системой сборки, а пакеты NuGet могут включать в себя MSBuild props и файл назначения .

В вашем конкретном случаеЯ хотел бы создать файл props, который определяет свойство, например, <RemiBouCosmosDBMigrationPath>CosmosDB\Migrations\</RemiBouCosmosDBMigrationPath>, что позволяет пользователям вашего пакета изменить свойство на другой путь, перезаписывая значение свойства в их csproj, если они предпочитают.

Затем создайтефайл целей, который содержит цель, например,

<Target name="RemiBouCosmosDBMigrationsEmbedMigrations" BeforeTargets="???">
  <ItemGroup>
    <EmbeddedResource Include="$(RemiBouCosmosDBMigrationPath)**\*.js" />
  </ItemGroup>
</Target>

Вам необходимо выяснить, какое имя цели лучше всего добавить в атрибут BeforeTargets, но я надеюсь, что вы понимаете эту идею.Файл csproj - это не более чем файл MSBuild с определенными соглашениями.Файлы MSBuild могут импортировать другие файлы MSBuild, а MSBuild и NuGet работают вместе, чтобы позволить MSBuild импортировать файлы MSBuild, полученные из восстановленных пакетов.Просто составьте свойства и элементы MSBuild по-другому, и конечный результат может быть тем же.

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