.NET Core 2.1 以下的控制台应用程序生成 EXE,且使用命令行参数动态运行控制器应用程序的示例
文章:
https://stackoverflow.com/questions/44038847/vs2017-compile-netcoreapp-as-exe
引用
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.CommandLineUtils" Version="1.1.1" />
<PackageReference Include="System.Collections.NonGeneric" Version="4.3.0" />
</ItemGroup>
Program.cs
using Microsoft.Extensions.CommandLineUtils; namespace EnumerableSample
{
class Program
{
static void Main(string[] args)
{
var app = new CommandLineApplication(throwOnUnexpectedArg: false);
app.FullName = "LINQ Sample App";
LinqSamples.Register(app);
FilteringSamples.Register(app);
GroupingSamples.Register(app);
CompoundFromSamples.Register(app);
JoinSamples.Register(app);
SortingSamples.Register(app); app.Command("help", cmd =>
{
cmd.Description = "Get help for the application";
CommandArgument commandArgument = cmd.Argument("<COMMAND>", "The command to get help for");
cmd.OnExecute(() =>
{
app.ShowHelp(commandArgument.Value);
return ;
});
}); app.OnExecute(() =>
{
app.ShowHelp();
return ;
}); app.Execute(args);
}
}
}
LinqSamples.cs
using Microsoft.Extensions.CommandLineUtils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection; namespace EnumerableSample
{
internal class LinqSamples
{
internal static void Register(CommandLineApplication app)
{
MethodInfo[] methods = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.Name == nameof(LinqSamples))
.Single()
.GetMethods()
.Where(m => m.IsPublic && m.IsStatic)
.ToArray(); foreach (var method in methods)
{
app.Command(method.Name.ToLower(), cmd =>
{
cmd.Description = method.Name;
cmd.OnExecute(() => { method.Invoke(null, null); return ; });
});
}
} public static void GenerateRange()
{
var values = Enumerable.Range(, );
foreach (var item in values)
{
Console.Write($"{item} ", item);
}
Console.WriteLine();
}
}
}
FilteringSamples.cs
using DataLib;
using Microsoft.Extensions.CommandLineUtils;
using System;
using System.Linq; namespace EnumerableSample
{
public class FilteringSamples
{
internal static void Register(CommandLineApplication app)
{
app.Command("filter", cmd =>
{
var invokeMethodOption = new CommandOption("-m", CommandOptionType.NoValue);
var indexOption = new CommandOption("-i", CommandOptionType.NoValue);
var typeOption = new CommandOption("-t", CommandOptionType.NoValue);
cmd.Options.AddRange(new[] { invokeMethodOption, indexOption, typeOption });
cmd.Description = "filter -[m|i|t]";
cmd.OnExecute(() =>
{
if (invokeMethodOption.HasValue())
{
FilteringWithMethods();
}
else if (indexOption.HasValue())
{
FilteringWithIndex();
}
else if (typeOption.HasValue())
{
TypeFiltering();
}
else
{
Filtering();
}
return ;
});
});
} public static void Filtering()
{
var racers = from r in Formula1.GetChampions()
where r.Wins > && (r.Country == "Brazil" || r.Country == "Austria")
select r; foreach (var r in racers)
{
Console.WriteLine($"{r:A}");
}
} public static void FilteringWithIndex()
{
var racers = Formula1.GetChampions()
.Where((r, index) => r.LastName.StartsWith("A") && index % != );
foreach (var r in racers)
{
Console.WriteLine($"{r:A}");
}
} public static void FilteringWithMethods()
{
var racers = Formula1.GetChampions()
.Where(r => r.Wins > && (r.Country == "Brazil" || r.Country == "Austria")); foreach (var r in racers)
{
Console.WriteLine($"{r:A}");
}
} public static void TypeFiltering()
{
object[] data = { "one", , , "four", "five", };
var query = data.OfType<string>();
foreach (var s in query)
{
Console.WriteLine(s);
}
}
}
}
运行截图:


谢谢浏览!
.NET Core 2.1 以下的控制台应用程序生成 EXE,且使用命令行参数动态运行控制器应用程序的示例的更多相关文章
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...
- 解决 dotnet core 1.x 命令行(cli) 下运行路径错误
环境: Windows 10,Visual Studio 2017 centos 7,nginx,supervisor,dotnet core 1.1 问题: 在 Linux 配置 superviso ...
- .Net Core命令行配置-配置介绍
1.使用VS2017 创建一个控制台应用程序,选中控制台应用(.NET Core) 2. 使用程序包管理控制台键入 Install-Package Microsoft.AspNetCore -Vers ...
- 如何:在 Winform 动态启动、控制台命令行?
需求 winForm 程序输出类型为 windows 程序(不是命令行程序) 在运行时想输入一些信息编译开发调试,如何实现这一功能 解答: AllocConsole.FreeConsole ...
- 控制台命令行API
js调试系列: 控制台命令行API 上次初步介绍了什么是控制台<js调试系列: 初识控制台>,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么 ...
- js调试系列: 控制台命令行API
js调试系列目录: - 上次初步介绍了什么是控制台,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么操作吧. 先打开百度,然后按 F12 打开后,如果不是 C ...
- 通过dotnet命令行设置asp.net core服务的启动地址
需求: 通过dotnet命令行启动asp.net core 服务时,自定义监听端口. 方法: 在program.cs中增加命令行参数配置: WebHost.CreateDefaultBuilder(a ...
- 体验.NET Core 命令行应用程序-CommandLineUtils
前言 在我们开发中可能需要设计一次性应用程序,这些实用程序可以利用接近原始源代码的优势,但可以在与主Web应用程序完全独立的安全性上下文中启动.具体在 [管理过程](https://12factor. ...
- .NET CORE与Spring Boot编写控制台程序应有的优雅姿势
本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...
随机推荐
- 教妹学 Java:难以驾驭的多线程
00.故事的起源 “二哥,上一篇<集合>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很关心. “这篇文章的浏览量要比第一篇<泛型>好得多.” “这是 ...
- Python远程linux执行命令
1.远程登录到linux上,使用到的模块paramiko #远程登陆操作系统 def ssh(sys_ip,username,password,cmds): try #创建ssh客户端 client ...
- OpenGL入门1.6:坐标系统,3D箱子
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 我们已经学习了如何利用矩阵变换来对所有顶点进行变换 OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备 ...
- ASP.NET中WebService的创建和部署以及通过反射动态调用WebService
一.在ASP.NET中创建WebService 首先我们先创建一个ASP.NET Web 应用程序,此处我们以VS2017为例 点击新创建的项目,右键添加新建项,选择Web服务,输入名称后点击添加 这 ...
- linux tmux用法
1. 安装工具 Centos : yum install tmux 2. 基本操作 新建会话:tmux new -s session-name 查看会话:tmux ls 进入会话:tmux a -t ...
- C# ZedGraph实时多条曲线数据更新实例
C# ZedGraph实时多条曲线数据更新实例 先看展示效果 1.创建曲线实例添加必要的元素 public class LineChannel { public LineChannel(int id, ...
- HashMap、ConcurrentHashMap解析
一.HashMap分析 在JDK1.8之前,hashMap由数组+链表组成,1.8之后,对hashMap进行了一些修改,最大的不同就是利用了红黑树,所以其由数组+链表+红黑树组成.查找时,根据hash ...
- Metasploit漏洞扫描
Metasploit漏洞扫描 漏洞扫描是自动在目标中寻找和发现安全弱点. 漏洞扫描器会在网络上和对方产生大量的流量,会暴露自己的行为过程,如此就不建议你使用漏扫了. 基本的漏洞扫描 我们首先使用net ...
- [b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock
# -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共 ...
- bayaim_杀神_全民飞机大战
bayaim_杀神_全民飞机大战 ------------------------ 系统:IOS QQ:7742469490 王者:30 游戏名:神 级别:98 装备:满鸡 + 新战魂+ 歼31 + ...