.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程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...
随机推荐
- WPF——如何为项目设置全局样式。
在项目中,需要为所有的Button.TextBox设置一个默认的全局样式,一个个的为多个控件设置相同的样式显然是不明智的.在WPF中可以通过资源设置全局样式,主要有俩种方法: 1.第一种就是先写好按钮 ...
- Web前端基础(6):CSS(三)
1. 定位 定位有三种:相对定位.绝对定位.固定定位 1.1 相对定位 现象和使用: 1.如果对当前元素仅仅设置了相对定位,那么与标准流的盒子什么区别. 2.设置相对定位之后,我们才可以使用四个方向的 ...
- 易优CMS:小白学代码之notempty
[基础用法] 名称:notempty 功能:判断某个变量是否为空,可以嵌套到任何标签里面使用,比如:channel.type等 语法: {eyou:notempty name='$eyou.field ...
- VUE组内培训
最近去参加了一个外部VUE的周末培训,加上自己比较感兴趣所以对这项很热的前端框架做了点学习,顺便给组内同事做个简单的分享,希望下次有项目可以使用上- VUE的语法教程网上很多我就不一一列举,截图放一下 ...
- Dynamics CRM 中Web API中的深度创建(Deep Insert)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 区块链社交APP协议分析预告
2017年,比特币的火热,直接导致了代币市场的繁荣: 2018年,作为信用体系的未来解决方案,区块链引发了互联网原住民的淘金热. 作为风口上的引流神器,区块链技术与社交网络结合起来,产生了一系列区块链 ...
- Android 矢量图详解
官方文档 关于 Vector,在官方开发指南中介绍.本文章是由个人翻译官方指南然后添加个人理解完成. 由于个人精力有限,多个渠道发布,排版上可能会有问题,如果影响查看,请移步 Android 开发者家 ...
- Python上下文管理器的使用
上下文管理器可以控制代码块执行前的准备动作,以及执行后的清理动作. 创建一个上下文管理器类的步骤:(1)一个__init__方法,来完成初始化(可选)(2)一个__enter__方法,来完成所有建立工 ...
- centOS7安装mysql8.0完美教程!!只要按照步骤,无脑操作,一次成功!
查看防火墙systemctl status firewalld重启防火墙systemctl start firewalld 1.mysql 首先关闭防火墙 systemctl stop firewal ...
- fiddler---Fiddler工具详细介绍
在做测试的过程中,遇到一些问题都会去进行抓包,抓包可以帮助我们解决很多问题,抓包工具有很多比如fiddler,浏览器调试工具(F12),charles等,抓包工具是我们测试人员必不可少的一项技能. 什 ...