如何从另一个项目访问一个项目中的配置文件

时间:2020-04-26 23:02:54

标签: c# discord discord.net

这是我当前项目中的数据库上下文设计工厂类。要连接到我的数据库,它将查询我的连接字符串,该字符串存储在配置文件(_config.json)中。

public class HiromiContextDesignFactory : IDesignTimeDbContextFactory<HiromiContext>
{
    public HiromiContext CreateDbContext(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath() // What is the path
            .AddJsonFile("_config.json")
            .Build();

        var builder = new DbContextOptionsBuilder<HiromiContext>()
            .UseNpgsql(configuration["Connections:Postgre"]);

        return new HiromiContext(builder.Options);
    }
}

但是,我的配置文件位于另一个项目的根目录中。因此,我不确定应该在SetBasePath()方法中使用什么路径来访问该文件。我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

将“另一个”项目添加为“当前”项目的项目引用,确保将“ _config.json”复制到“另一个”项目的build / project设置中的输出目录中,然后所有工件应复制到当前项目的输出目录...

答案 1 :(得分:0)

看起来这个问题很简单。 @aDisplayName提供的答案效果很好,如果您遇到相同的问题,这是可以接受的解决方案。但是,Microsoft实际上建议使用user secrets来存储开发中的敏感数据。

由于仅迁移需要数据库上下文设计工厂类(它与应用程序或数据库连接上下文的运行无关,即与从DbContext继承的常规上下文类无关),我可以安全地将我的连接字符串存储为用户机密。

为此,我已经链接了上面的文档,但这是我所做的快速摘要。

导航到包含设计工厂类的项目并运行命令

dotnet user-secrets init
dotnet user-secrets set "Connections:Postgres" "CONNECTION_STRING"

然后,在您的配置构建器上调用AddUserSecrets<T>()方法,而不是设置基本路径。配置构建器应该看起来像这样。

var configuration = new ConfigurationBuilder()
            .AddUserSecrets<HiromiContext>() // This should be the name of the class that inherits from DbContext.
          //.AddUserSecrets(Assembly.GetEntryAssembly()) You can also do this if your database context and database design factory classes are in the same project, which should be the case 99% of the time
            .Build();