安装nuget软件包时如何执行自定义脚本?

时间:2019-01-28 21:56:12

标签: powershell nuget

我创建了这个项目https://github.com/RemiBou/RemiBou.CosmosDB.Migration,要进行工作,它需要用户做两件事:创建适当的文件夹并编辑csproj,以便嵌入这些文件夹中的文件。

在使用install.ps1安装时,我们可以自动执行此操作,但是不建议使用此功能。你知道我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

install.ps1并非完全不推荐使用,但这是packages.config独有的功能。 PackageReference没有安装的概念,因为任何人都可以简单地编辑csproj并添加PackageReference。还原时,NuGet无法知道这是添加引用后第一次为项目还原软件包,还是这是第一次使用干净的存储库还原项目(在“ msbuild /例如“ t:clean”或“ git clone”。

我不知道用于创建文件夹的替代方法,除了拥有说明该约定是使用该文件夹名称的文档外。但是,修改csproj的另一种方法是利用MSBuild是通用的生成系统,并且NuGet软件包可以包含MSBuild props and targets file的事实。

在您的特定情况下,我将创建一个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属性和项目,最终结果仍可以相同。