Я разрабатываю приложение .NET Core, используя код Visual Studio и dotnet sdk на C #.У меня есть две целевые платформы в csproj:
<TargetFrameworks>netcoreapp2.0;net471</TargetFrameworks>
, и я хочу скомпилировать консольное приложение, когда целью является netcoreapp2.0, и службой Windows, когда целью является net471.Чтобы добиться этого, я добавил символ препроцессора NET471 в код, связанный со службой.
Я обнаружил, что для создания службы Windows и возможности использования InstallUtil.exe необходимо создать класс, который наследуетиз ServiceBase и других, которые наследуются от Installer.Этот класс установщика находится в пространстве имен System.Configuration.Install.
Проблема заключается в том, что когда я хочу собрать для net471, например, так:
dotnet build -f net471
он завершился с ошибкой:
MyServiceInstaller.cs (4,28): ошибка CS0234: имя типа или пространства имен 'Install' не существует в пространстве имен 'System.Configuration' (у вас отсутствует ссылка на сборку?) [C:\ Users \ jjamardo \ service-test \ service-test.csproj] MyServiceInstaller.cs (9,39): ошибка CS0246: не удалось найти тип или имя пространства имен «Установщик» (отсутствует директива using или ссылка на сборку?) [C: \ Users \ jjamardo \ service-test \ service-test.csproj] 0 Предупреждение (я) 2 Ошибка (и)
Я много гуглю, но не могунайди что-нибудь полезное.
Попробовав множество вещей, мне удалось его скомпилировать, НО с использованием net461 в качестве целевой платформы.
dotnet build -f net461
Это может сработать, но я не хочу переходить на4.6.1.Я попытался создать .NET Framework 4.7.1 в Visual Studio 2017, и приложение работает нормально, поэтому я предполагаю, что пространство имен все еще существует.Я не понимаю, почему с помощью dotnet компилируется с целью 4.6.1, но не работает с 4.7.1.
Итак, вопрос: как я могу создать службу Windows, используя dotnet, с net471 в качестве целевой платформы.Есть ли другой способ сделать службу Windows без наследования от ServiceBase и Installer?
Спасибо!