如何部署提供Powershell命令(如EF的Scaffold-DbContext)的Nuget包?

时间:2018-10-05 04:08:33

标签: c# .net powershell .net-core nuget

假定我正在编写一个自动化脚本,该脚本为.NET项目生成文件(因为.NET Core项目不再支持T4)。现在,我想使用Nuget进行部署,因此我可以使用类似于Entity Framework的Scaffold-DbContext的命令。我使用Console App编写的项目,但是如果需要,我可以轻松地将其转换为其他类型。

我尝试查看Entity Framework的源代码,发现它们正在打包init.ps1文件以添加命令,并且实现位于here中。

抱歉,这是我所能做到的。是否有有关如何执行此操作的文档?或者,如果可能的话,请告诉我我的情况,如果我想运行此命令,如何调用我的.NET Core项目?

Scaffold-ViewModels -Input Models\Entities -Output Models\ViewModels

编辑:经过进一步调查,我发现EF将压缩后的二进制文件打包在其文件夹中:

  <files>
    <file src="lib\**\*" target="lib/" />
    <file src="tools\**\*" target="tools/"/>
    <file src="$targetDir$*.psd1" target="tools/"/>
    <file src="../ef/bin/$configuration$/net461/ef.exe" target="tools/net461/any/" />

他们的脚本正在执行带有附加参数的ef.exe。我的问题是:关于它的任何文档?有哪些参数? (就像他们的脚本一样,它们包括$env等)。

如果可能的话,欢迎您在Hello World上通过教程/入门来从Nuget创建自动化脚本。

2 个答案:

答案 0 :(得分:1)

如果我理解您的权利,那么您想实现此用例:

“在安装nuget软件包时,我想启动一个ps脚本来解析项目源并创建新的生成文件”?

您无法以这种方式模拟TT脚本的传递,因为TT是已经安装为VS extension(并已集成到VS)的东西。

通过NUGET传递TT脚本非常简单,因为在安装时仅需要将tt文件放入项目文件夹中即可。

对于高级方案,您将需要自定义dotnet工具命令 https://docs.microsoft.com/en-us/dotnet/core/tools/extensibility 或VS Extension或两者兼有。

答案 1 :(得分:1)

我上一次使用它(几年前)是init.ps1文件,它只是一个Powershell脚本,在安装软件包时会在项目上下文中的Visual Studio中运行。我认为EF非常复杂,它需要二进制文件,但是您可以使用所有常规的powershell cmdlet来操纵项目:

考虑New-ItemCopy-ItemGet-ChildItemTest-PathAdd-Content等。

https://docs.microsoft.com/en-gb/powershell/module/Microsoft.PowerShell.Management/?view=powershell-6中查看更多命令。