.net core 生成.NET核心控制台应用程序以输出EXE
对于以.NET Core 1.0为目标的控制台应用程序项目,我不知道如何在生成过程中获取.exe输出。该项目在调试中运行良好 我已经尝试过发布这个项目,但也不起作用。这是有意义的,因为EXE文件是特定于平台的,但必须有一种方法。我的搜索只找到了对使用project.json的旧.NET核心版本的引用 无论何时构建或发布,我得到的都是:.net core 生成.NET核心控制台应用程序以输出EXE,.net-core,.net Core,对于以.NET Core 1.0为目标的控制台应用程序项目,我不知道如何在生成过程中获取.exe输出。该项目在调试中运行良好 我已经尝试过发布这个项目,但也不起作用。这是有意义的,因为EXE文件是特定于平台的,但必须有一种方法。我的搜索只找到了对使用project.json的旧.NET核心版本的引用 无论何时构建或发布,我得到的都是: 出于调试目的,您可以使用DLL文件。您可以使用dotnetconsoleapp2.dll运行它。如果要生成EXE文件,必须生成一个自包含的应用程序 要生成自包含应
出于调试目的,您可以使用DLL文件。您可以使用
dotnetconsoleapp2.dll
运行它。如果要生成EXE文件,必须生成一个自包含的应用程序
要生成自包含应用程序(Windows中的EXE),必须指定目标运行时(特定于目标操作系统)
仅限.NET Core 2.0之前版本:首先,在.csproj文件()中添加目标运行时的运行时标识符:
win10-x64;ubuntu.16.10-x64
从.NET Core 2.0开始,不再需要执行上述步骤
然后,在发布应用程序时设置所需的运行时:
dotnet publish -c Release -r win10-x64
dotnet publish -c Release -r ubuntu.16.10-x64
以下内容将在输出目录中生成
- 所有的包引用
- 输出组件
- 引导exe
$(SolutionDir)\n打包\
我在这里的一个示例中总结了它:这是我的黑客解决方法-生成一个控制台应用程序(.NET Framework),该应用程序读取自己的名称和参数,然后调用
dotnet[nameofex].dll[args]
当然,这假定.NET安装在目标计算机上
这是密码。请随意复制
使用系统;
使用系统诊断;
使用系统文本;
命名空间dotNetLauncher
{
班级计划
{
/*
如果您制作.NET核心应用程序,它们必须像这里的.NET blah.dll参数一样启动
这是一个方便的EXE文件,通过name.EXE启动.NET核心应用程序
只需将输出exe重命名为要启动的.NET核心DLL文件的名称
*/
静态void Main(字符串[]参数)
{
var exePath=AppDomain.CurrentDomain.BaseDirectory;
var exeName=AppDomain.CurrentDomain.FriendlyName;
var assemblyName=exeName.Substring(0,exeName.Length-4);
StringBuilder passInArgs=新StringBuilder();
foreach(args中的var arg)
{
bool needsErroringQuotes=false;
if(arg.Contains(“”)| arg.Contains(“”))
{
passinars.Append(“\”);
NeedsErroringQuotes=true;
}
Append(arg.Replace(“\”,“\”);
如果(需要箭头引号)
{
passinars.Append(“\”);
}
passinars.Append(“”);
}
字符串callingArgs=$“\”{exePath}{assemblyName}.dll\“{passinars.ToString().Trim()}”;
var p=新流程
{
StartInfo=newprocessstartinfo(“dotnet”,callingArgs)
{
UseShellExecute=false
}
};
p、 Start();
p、 WaitForExit();
}
}
}
如果可以接受.bat文件,则可以创建与DLL文件同名的bat文件(并将其放置在同一文件夹中),然后粘贴以下内容:
dotnet %~n0.dll %*
显然,这是假设机器已安装.NET Core并且全局可用
c:\> "path\to\batch\file" -args blah
(此答案源自。)更新.NET 5强> 以下内容适用于.NET 5正式发布之日/之后的2020年11月 (请参阅下面的“快速术语”部分,而不仅仅是“如何使用”部分) 如何(CLI) 预备知识
- 下载.net 5 SDK的最新版本李>
dotnet publish --output "c:/temp/myapp" --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:PublishTrimmed=true --self-contained true
如何使用(GUI)
预备知识
- 如果阅读NOV2020之前版本:Visual Studio预览的最新版本*
- 如果正在阅读NOV2020+:Visual Studio的最新版本*
部署模式
- 依赖于框架意味着生成了一个小的.exe文件,但应用程序假定在主机上安装了.Net 5
- 自包含意味着一个更大的.exe文件,因为.exe包含框架,但您可以在任何计算机上运行.exe,无需预安装.Net 5。注意:使用自包含时,将生成其他依赖项(.dll),而不仅仅是.EXE
TLDR:它相当于.Net5的提前编译(AOT)。预编译为本机代码的应用程序通常启动得更快。应用程序的性能更好(或更差!),这取决于许多因素。更多信息 修剪未使用的组件
当设置为true时,dotnet将生成一个非常精简和小的.exe,并且只包含它需要的内容。这里要小心。示例:在应用程序中使用反射时,您可能不希望将此标志设置为t
dotnet publish --output "c:/temp/myapp" --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:PublishTrimmed=true --self-contained true