我使用https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-CollectingBuildInformation docker镜像使用EF Core运行ASP.NET Core应用程序。运行应用程序工作,但我无法使用任何工具。
dotnet ef database update
等命令失败。
是否可以在没有完整SDK的情况下运行任何DotNetCliToolReference
工具?
答案 0 :(得分:4)
您无法在制作中使用DotNetCliToolReference。
但你可以用两种方式做到。
通过解析DbContext服务并调用Database.Migrate()
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<DatabaseApplicationContext>()
.Database.Migrate();
}
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
或直接通过在DbContext类中调用Database.Migrate()
protected DatabaseApplicationContext()
{
Database.Migrate();
}
public DatabaseApplicationContext(DbContextOptions options) : base(options)
{
Database.Migrate();
}
我建议使用第一个选项,因为迁移仅在应用程序启动时完成。但是第二个将在创建DbContext时调用(最有可能在每个请求中,如果你保持默认的DbContext范围 - 作为一个Scoped服务)
答案 1 :(得分:4)
是否可以在没有完整SDK的情况下运行任何DotNetCliToolReference工具?
没有。执行这些工具的逻辑存在于SDK中。
但是,如果你在带有SDK的计算机上使用--verbose
运行它,你会看到一行如下所示:
dotnet exec ... ef.dll ...
你可以在容器内运行该命令。