2017-10-11 80 views
0

我可以在开发时读取值(value1,Value2),发布后可以读取它们可能出现的问题吗?在发布后无法从Json文件读取值

public IConfigurationRoot Configuration { get; set; } 

public Startup(IHostingEnvironment env) 
    { 
     Configuration = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json") 
     .Build(); 
    } 

public void readValues() 
    { 
     var val1 = ($"{Configuration["Value1"]}"); 
     var val2 = ($"{Configuration["Value2"]}"); 
    } 

JSON:

{ 
     "Value1": "Hello", 
     "Value2": "World" 
    } 
+0

您可以检查ContentRootPath并确保该位置具有所需的权限。这似乎更可能是路径和权限问题。 –

+1

你的意思是说'发布后无法读取它们'。你有例外吗?你有没有检查发布文件夹中是否存在'appsettings.json'文件? – Set

+0

val1和val2虽然发展我可以读取值,发布后应用程序读取文件,但值(Value1,Value2)给出一个空字符串@Set – Batman

回答

0

改变你的构造函数,你加入到这个:

public Startup(IHostingEnvironment env) 
     { 
      var builder = new ConfigurationBuilder() 
       .SetBasePath(env.ContentRootPath) 
       .AddJsonFile("appsettings.json"); 

      Configuration = builder.Build(); 
     } 

public IConfiguration Configuration { get; } 

这会工作得很好。

0

也许你发布作业未复制appsettings.json到发布文件夹?

您可以通过检查您的应用发布到的目录的内容来确认。 您是否使用.NET Core CLI发布?像:dotnet publish -c Release

您定位的是哪个版本?如果是netcoreapp2.0,例如: 发布路径经过bin\Release\netcoreapp2.0\publish。 你应该可以在那里找到appsettings.json

如果它不存在,你可以设置通过更改项目文件(的csproj)修复它:

</PropertyGroup> 
    <ItemGroup> 
    <None Update="appsettings.json"> 
     <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> 
    </None> 
    </ItemGroup> 

如果这不是问题,该文件其实是在发布目录中,它可能是目录如果您正在调用该程序不是发布目录,并且在运行时代码中找不到appsettings.json

如果这些都不能帮助您,请提供更多上下文,例如共享项目以及有关如何运行发布版本的详细信息。

+0

看来,问题不在于JSON文件,其运行本地。问题似乎是,当将它们上传到Docker镜像时,它会在构建镜像时搜索appsettings.json文件。 'sudo docker run --net = my_bridge -it --name test-app -v/var/test:/ var/test microsoft/aspnetcore-build/bin/bash -c“dotnet /var/test/test.dll” ' – Batman

+0

您的Dockerfile必须将已发布文件夹的内容复制到映像中。如果您的dll位于/var/test/test.dll下,那么应该将ENTRYPOINT设置为/ var/test –