将 C# 应用程序导出到客户端 - 关于导入的混淆

Exporting C# Applications to clients - Confusion about imports

我从来没有真正理解 C# 应用程序的技术要求。 我知道 Windows 10 默认安装了一些 .NET 版本。但是每当我用 c# 编写控制台应用程序并将编译的 .exe 文件复制到另一台计算机时,.exe 文件永远不会 运行s(如果使用 net-core 或 net-framework 编译则无关紧要)。它总是缺少很多依赖项。所以我总是要么将大量的 dll 文件复制到与 .exe 文件相同的文件夹中,要么将其作为独立应用程序发布,这太荒谬了(130 MB .exe 文件用于 100 行应用程序,没有什么特别的)。

另一方面,我可以创建一个 windows-服务,编译并使用它。编译后的 service-exe 非常小(大约 30 kb),可以通过 cmd.exe(“sc create [...]”)安装。我在 windows 10 VM 上对此进行了测试。 运行没有问题。

我做对了吗?为什么 windows-services 运行 没有 .dll-files,但 console-applications 不能?由于 Windows 10 安装了很多 .net 应用程序,我假设每个 c# 应用程序都应该在 windows 10 上 运行 而不必添加 .dll 文件。

如果目标计算机没有安装目标计算机 运行time,您有两个选择:

  1. 安装 运行时间,然后 运行 应用程序。
  2. 将 运行time 与应用程序捆绑在一起,作为单独的文件或全部包含在同一个 exe 中。

选项 2 仅适用于 .Net Core 和 .Net 5 及更高版本。对于 .Net Framework(4 及更低版本),您必须选择选项 1。

您可以通过查看一些注册表值来检测安装了哪些版本的框架:https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

.Net Framework 4.6.1 包含在 Windows 10 中(我认为基础版本也是 1511)。 Source。这就是为什么您的 Windows 服务 运行 不需要您做任何事情就可以正常工作的原因。

您可以从 https://dotnet.microsoft.com/ 安装 .Net Core/5+ 运行time,这样您就不需要在二进制文件中包含 运行time,如果你愿意。