具有 Topshelf 的控制台应用程序在作为服务运行时引发异常



>我开发了一个控制台应用程序,它连接到RabbitMQ,然后处理一些消息。我正在使用 Topshelf 允许作为服务执行而没有(在纸上(问题,但是当我将其作为服务运行时,我遇到了以下异常

应用:XXX.exe框架 版本: v4.0.30319 描述: 由于 未处理的异常。异常信息:System.IO.FileNotFoundException 在 Microsoft.扩展.配置.文件配置提供程序.加载(布尔值( at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(( 在 Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(System.Collections.Generic.IList'1( at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build(( at XXX.Program.Main(System.String[](

现在我认为它以某种方式缺少配置文件或一些 dll,但我将所有文件都放在 c:\services\myservice 上的一个文件夹中。如果我从命令提示符运行 exe,它可以完美运行。

我还尝试将身份设置为网络服务/管理员用户和类似...没有运气。我正在使用顶级货架 4.0.4

有什么建议吗? 谢谢

溶液

这是我的错...

我不得不使用

var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location))
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.{environmentName}.json",true,true);

而不是

var builder = new ConfigurationBuilder() 
.SetBasePath(Directory.GetCurrentDirectory()) //(which is the default code present on MS site)
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.{environmentName}.json",true,true);

正如@bozoJoe所建议的那样,这是我问题的答案,赞成投票

溶液 这是我的错...

我不得不使用

var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location))
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.{environmentName}.json",true,true);

而不是

var builder = new ConfigurationBuilder() 
.SetBasePath(Directory.GetCurrentDirectory()) //(which is the default code present on MS site)
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.{environmentName}.json",true,true);

最新更新