我正在使用Visual Studio Code和C#上的dotnet sdk开发.NET Core应用程序。我在csproj中有两个目标框架:
<TargetFrameworks>netcoreapp2.0;net471</TargetFrameworks>
我希望在目标是netcoreapp2.0时编译控制台应用程序,在目标是net471时编译Windows服务。为此,我在与服务相关的代码中添加了预处理器符号NET471。
我发现要创建Windows服务并能够使用InstallUtil.exe,必须创建一个继承自ServiceBase的类,以及从Installer继承的其他类。此Installer类位于System.Configuration.Install命名空间中。
问题在于,当我想像这样构建net471时:
dotnet build -f net471
它因此错误而失败:
MyServiceInstaller.cs(4,28):error CS0234:类型或命名空间名称 名称空间'System.Configuration'中不存在'Install'(是 你错过了一个程序集引用?) [C:\用户\ jjamardo \服务测试\服务test.csproj] MyServiceInstaller.cs(9,39):错误CS0246:类型或命名空间名称 找不到'安装程序'(你是否错过了使用指令或 装配参考?) [C:\ Users \ jjamardo \ service-test \ service-test.csproj] 0警告2 误差(S)
我谷歌很多,但我找不到任何有用的东西。
尝试了很多我设法编译的东西,但是使用net461作为目标框架。
dotnet build -f net461
这可能有用,但我不想降级到4.6.1。我尝试在Visual Studio 2017中创建.NET Framework 4.7.1并且应用程序正常工作,因此我假设命名空间仍然存在。我不明白为什么使用dotnet编译目标4.6.1但是使用4.7.1失败。
所以,问题是:我如何使用dotnet制作Windows服务,net471作为目标框架。有没有其他方法可以在不从ServiceBase和Installer继承的情况下制作Windows服务?
谢谢!
答案 0 :(得分:0)
虽然不是一个好的答案,但.NET Core不支持System.Configuration.Install
名称空间。
答案 1 :(得分:0)
对于net471,您是否将其添加到项目中?
<ItemGroup>
<Reference Include="System.Configuration.Install" />
</ItemGroup>
答案 2 :(得分:0)
有一个实现System.Configuration.Install
API 1:1的NuGet程序包:Link to the package