net471 找不到 System.Configuration.Install 命名空间

jja*_*rdo 6 c# windows-services .net-core .net-4.7.1

我正在使用 Visual Studio Code 和 C# 上的 dotnet sdk 开发 .NET Core 应用程序。我在 csproj 中有两个目标框架:

<TargetFrameworks>netcoreapp2.0;net471</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

我想在目标是 netcoreapp2.0 时编译控制台应用程序,在目标是 net471 时编译 Windows 服务。为了实现这一点,我在与服务关联的代码中添加了预处理器符号 NET471。

我发现要创建一个Windows服务并能够使用InstallUtil.exe,需要创建一个继承自ServiceBase的类,以及其他继承自Installer的类。此 Installer 类位于 System.Configuration.Install 命名空间中。

问题是当我想像这样构建 net471 时:

dotnet build -f net471
Run Code Online (Sandbox Code Playgroud)

它因以下错误而失败:

MyServiceInstaller.cs(4,28):错误 CS0234:命名空间“System.Configuration”中不存在类型或命名空间名称“Install”(您是否缺少程序集引用?)[C:\Users\jjamardo\service- test\service-test.csproj] MyServiceInstaller.cs(9,39): 错误 CS0246: 找不到类型或命名空间名称“Installer”(您是否缺少 using 指令或程序集引用?)[C:\Users \jjamardo\service-test\service-test.csproj] 0 警告 2 错误

我用谷歌搜索了很多,但找不到任何有用的东西。

尝试了很多东西,我设法编译它,但使用 net461 作为目标框架。

dotnet build -f net461
Run Code Online (Sandbox Code Playgroud)

这可能有效,但我不想降级到 4.6.1。我尝试在 Visual Studio 2017 中制作 .NET Framework 4.7.1 并且应用程序运行良好,因此我假设命名空间仍然存在。我不明白为什么使用 dotnet 可以使用目标 4.6.1 进行编译,但使用 4.7.1 时会失败。

所以,问题是:如何使用 dotnet 制作 Windows 服务,以 net471 作为目标框架。有没有其他方法可以在不继承ServiceBase和Installer的情况下创建Windows服务?

谢谢!

Ken*_*ers 5

有实现System.Configuration.InstallAPI 1:1 的 NuGet 包:链接到该包


Ale*_*SFT 1

虽然这不是一个好的答案,但System.Configuration.Install.NET Core 不支持命名空间。