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

时间:2018-08-20 15:13:16

标签: topshelf

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

  

应用程序:XXX.exe框架   版本:v4.0.30319说明:由于   未处理的异常。异常信息:System.IO.FileNotFoundException   在   Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(布尔)   在Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()   在   Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(System.Collections.Generic.IList`1)   在Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()在   XXX.Program.Main(System.String [])

现在,我认为它以某种方式丢失了配置文件或某些dll,但是我所有文件都位于c:\ services \ myservice上的一个文件夹中。如果我从命令提示符下运行exe,它将正常运行。

我也尝试过将身份设置为网络服务/管理员用户以及类似的身份……没有运气。我正在使用TopShelf 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);

1 个答案:

答案 0 :(得分:1)

@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);