我很困惑,因为我在 Visual Studio 2019 中创建了一个新项目。我已经对不同的项目尝试了三次,每次它都导出为 DLL 而不是 EXE。以下是重现此问题的步骤:
- 新项目
- 控制台应用程序(.NET Core)
- 设置新项目的详细信息,然后点击“创建”按钮
- 将 Microsoft.Win32.Registry NuGet 包添加到项目
- 添加以下代码:
using Microsoft.Win32;
using System;
namespace Key_Statistics_Startup_Changer {
class Program {
static void Main(string[] args) {
if (args[0] == "CREATE_STARTUP") {
RegistryKey rkey = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
rkey.SetValue("Key Statistics", @"C:\Program Files\Key Statistics\Key Statistics.exe");
}
else if (args[0] == "REMOVE_STARTUP") {
RegistryKey rkey = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
rkey.DeleteValue("Key Statistics");
}
}
}
}
- 构建并运行项目
当我这样做时,当我通过 Visual Studio 输入参数时,程序会在启动时创建或删除所需的注册表(代码试图完成的任务)。但是,当构建此项目时,我的
Key Statistics Startup Changer\bin\Debug
文件夹为我提供了一个子目录 netcoreapp2.1
,其中包含以下文件:
关键统计 Startup Changer.deps.json
关键统计 Startup Changer.dll
关键统计 Startup Changer.pdb
关键统计启动 Changer.runtimeconfig.dev.json
关键统计启动 Changer.runtimeconfig.json
我确信我有正确的文件夹可以导出,并且每次我重新创建步骤(确保我不选择 C# DLL 项目)时,都会发生这种情况。
这里有什么交易?
当你选择
Console App (.NET Core)
而不是Console App (.NET Framework)
时你就错了,
简而言之,从 .net core 获取 .exe 比 .net Framework 更难。
不过不用担心,您只需复制所有代码并将其粘贴到新的文件中即可
Console App (.NET Framework)
项目。
当您设置应用程序文件夹时:添加/项目输出/... 在要选择的选项上,选择“发布项目”而不是“主要输出”。 这将打包 .exe 文件而不是 .dll,如果您确实需要 .dll 文件,请在输出组中选择“主输出”。
即使“目标操作系统版本”选择了一个值,csproj 文件也使用
net8.0-windows
的目标框架(这也是输出构建文件夹)。
更改下拉列表中的“目标操作系统版本”,然后返回 7.0,现在可以读取 .csproj 行
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>True</UseWPF>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
...
构建应用程序现在输出到
\bin\Debug\net8.0-windows7.0
,并生成一个 .exe。
右键单击该项目并转到属性。选择“应用程序”选项卡,右侧有一个名为“输出类型”的选项。你可以选择任何你想要的;例如,如果您希望项目发出 DLL,只需选择 Class Library。