【问题标题】:File path different in webapp deploywebapp部署中的文件路径不同
【发布时间】:2022-01-07 07:50:20
【问题描述】:

我们有一组数据库迁移代码,我们使用自定义配置运行在以下类上:

builder.HasData(SeedDataHelper.SeedFromJson<Make>("../Project/Seeds/Makes.json"));

这在进行本地迁移时效果很好。

问题是当我们部署应用时,种子的新文件路径是:

../wwwroot/Seeds/Makes.json

有没有办法在部署后保持路径不变,或者有一个设置来确定使用哪个路径?

我尝试添加一个 local.settings.json 并告诉启动将 json 读入环境变量。但是在使用 GetEnvironmentalVariable 时。我返回 null。

【问题讨论】:

  • builder.HasData(SeedDataHelper.SeedFromJson&lt;Make&gt;("Seeds/Makes.json")); 不够吗?当您已经在文件夹中时,您要向上一个文件夹访问该文件夹吗?
  • @pevecg 所以我们有一个名为persistence 的项目,配置代码就在其中。但是 SeedFromJson 在另一个帮助项目中。例如,如果我使用“Makes.json”,它会尝试并在以下位置查找文件:\ApiProject\Makes.json'。但是本地种子在\PersistenceProject\Makes.json'中。
  • 代替 "../Project/Seeds/Makes.json" 尝试 "~/Project/Seeds/Makes.json" 一次并检查。

标签: c# azure .net-5


【解决方案1】:

如果您在部署期间将该路径保留在应用程序配置集中,则该解决方案应该更加独立于环境。这样您就可以灵活地根据应用程序运行的环境从不同的位置获取它。

  1. 本地环境:您可以使用 appsettings.json 来存储该目录:


    {
          applicationPaths: {
              seeds:"PATH HERE"
          }
      }

  1. 将要访问配置条目的启动配置为环境变量条目。您可以在启动时使用 AddEnvironmentVariables() 方法调用来设置 configurationBuilder


    public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                             .SetBasePath(env.ContentRootPath)
                             .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)                             
                             .AddEnvironmentVariables(); // override settings with environment variables
    
             
    
        }

现在您可以从环境变量中以 applicationPaths:seeds 的形式读取此配置,但从应用程序代码中它只是一个配置条目。

  1. 配置您的网络应用程序。

您需要在部署 webapp 期间将条目配置为“applicationPaths.seeds”,如下所示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2021-05-16
    • 2016-09-07
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多