如何创建命令行应用程序

本文关键字:命令行 应用程序 创建 何创建 | 更新日期: 2023-09-27 18:02:20

使用VisualStudio可以很容易地为控制台、窗体等创建应用程序类型,但我看不到命令行应用程序的选项。我打算安装下面的小程序作为一个简单的。exe在c:'windows'system32。如果我打开一个命令终端和CD到VS项目的bin'debug目录,我可以输入DateTime并得到很好的输出。但是,如果我将DateTime.exe复制到c:'windows'system32并打开另一个命令终端,命令DateTime给出一个错误,说应用程序无法启动,因为。net Shim错误。

我是否应该做一些不同的事情来创建命令行应用程序而不是控制台应用程序?

我应该从c:'windows'system32的bin'debug目录中安装更多文件吗?

using System;
namespace DateTime
{
    class Program
    {
        static void Main()
        {
                Console.Write(System.DateTime.Now.ToString("o"));
        }
    }
}

注:上述命令行应用程序的原因是系统命令Date/TTime/T不提供秒输出。我的应用程序显示例如:2015-07-13T10:58:29.7329261+02:00(,你可以通过参数获得其他格式,参见此问题的先前编辑)

如何创建命令行应用程序

控制台项目是一个命令行项目。

您可以使用args[]来跟踪命令行参数。

你的可执行文件可能有依赖项:你可以使用像obfuscator或其他工具将它们打包到。exe中,这样你就不需要外部文件了。

或者,将你的项目安装到它自己的文件夹中,并修改PATH变量以包含目录的路径——这将允许你从任何文件夹运行你的。exe,就像你可以在任何文件夹中运行'dir'一样。

我不清楚你的DateTime问题是什么,但是你可以使用.ToString()过载来调整格式,.Parse()来解释各种格式的日期。

var dt = new DateTime();
dt.ToString("dd/MM/yyyy hh:mm:ss");

根据SLC的建议,我尝试用c++编写这个应用程序。事实证明,VisualStudio为c++控制台应用程序提供了一个选择:使用CLR,或者作为Win32,其中CLR代表。net框架。实际上,Win32项目构建为一个简单的。exe文件,可以安装在%PATH%中提到的任何目录中,例如C:'Windows'System32' .

VisualStudio不为c#控制台应用程序提供此选项。

不幸的是,c++是c#的倒退:它更复杂。对于某些类型的应用,它应该运行得更快,但需要花费更多的时间来开发。将c++代码与上面的c#源代码进行比较:

#include "stdafx.h"
#include <iostream>
#include <ctime>
int main()
{
    // get current time
    time_t time_now = time(0);
    // convert to local time struct
    struct tm tstruct;
    localtime_s(&tstruct, &time_now);
    // format to string
    char str_time[80];
    strftime(str_time, sizeof(str_time), "%Y-%m-%d %H:%M:%S", &tstruct);
    // to stdout
    std::cout << str_time << std::endl;
    return 0;
}

如前所述,上述c++代码作为Win32 Console project,将作为%PATH%目录中的单个. exe文件运行。

为了完整起见,这里有一个更好的c++源代码,作为CLR Console project,也就是说,在。net框架下,它的编码速度将与c#相当,但也不会从%PATH%的目录中作为单个。exe文件运行。

#include "stdafx.h"
using namespace System;
int main()
{
    Console::WriteLine(DateTime::Now);
    Console::WriteLine(DateTime::Now.ToString(L"o"));
    Console::WriteLine(DateTime::Now.ToString(L"yyyy-MM-dd HH:mm:ss"));
    return 0;
 }

输出为,例如:

14-7-2015 16:23:27
2015-07-14T16:23:27.6978497+02:00
2015-07-14 16:23:27

以上应用程序也从PowerShell测试,但随后从CLR/。基于Net的应用程序也不能从%PATH%运行。

有一个简单的NuGet包,可以帮助您创建自己的命令行应用程序,而无需处理许多事情,如解析参数和映射类型等,

https://www.nuget.org/packages/CommandLineTool/