2017-10-11 26 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 –