如何在 .Net vNext 包中发现和执行命令

How do you discover and Execute commands in a .Net vNext package

非常想以编程方式发现和执行 dnx 命令。目前我有一个计划程序,它将使用 MEF 扫描文件夹中的作业,然后创建一个新的 AppDomain 和 运行 在某个计划中找到的任何作业,并在完成后销毁应用程序域。

我想将所有作业转换为 dnx 控制台应用程序,并找到一种方法来扫描文件夹中的所有包及其相应的 dnx 命令,以便可以从计划应用程序和命令行执行它们以一次性的方式。

似乎一定有一些库已经在这样做了,因为 Visual Studio 可以发现您的命令并调用它们来调试它们

DNX 命令只是给定 project.json 引用的控制台应用程序的名称。 project.json 然后还允许您更改用于引用引用的控制台应用程序的名称。所以最好的方法就是扫描 project.json 目录并获取 "commands" 部分。

如果您随后有兴趣确定可以将哪些参数传递给命令,那么这将特定于您如何在控制台应用程序中实现这些 arguments/options。

有两种选择:

  1. 如果您有一个 project.json 文件,您可以简单地解析它并查找 commands 属性.
  2. 如果您有 nupkg,那么您可以在其中查找 App 文件夹。这将告诉您哪个命令是全局可安装的。然而,有一些命令在打包时被忽略,它们不会出现在那里。看一下 dnu commands 的代码:https://github.com/aspnet/dnx/tree/dev/src/Microsoft.Dnx.Tooling/Install

执行此操作的 VS 代码不是 public,而是选项 #1(查看 project.json 文件)。