I managed to get this working for version 4.3 in a console application after a struggle and thought this might be useful for someone. Since Nop 4+ no longer provides a nuget, you have to manually create all the required version references.
The build folder requires some folders and files in specific locations
appsettings.json (direct copy of file from source with no modifications)
App_Data > dataSettings.json (with valid database connection)
wwwroot
wwwroot\db_backups
wwwroot\icons
wwwroot\images
wwwroot\images\uploaded
Themes
Plugins
I include the dataSettings.json and appsettings.json in the project to copy automatically on build.
Then I updated the csproj to create the required folders if missing.
<Target Name="CreateRequiredFolders" AfterTargets="Build">
<MakeDir Directories="$(TargetDir)wwwroot" Condition="!Exists('$(TargetDir)wwwroot')" />
<MakeDir Directories="$(TargetDir)wwwroot\db_backups" Condition="!Exists('$(TargetDir)wwwroot\db_backups')" />
<MakeDir Directories="$(TargetDir)wwwroot\icons" Condition="!Exists('$(TargetDir)wwwroot\icons')" />
<MakeDir Directories="$(TargetDir)wwwroot\images" Condition="!Exists('$(TargetDir)wwwroot\images')" />
<MakeDir Directories="$(TargetDir)wwwroot\images\uploaded" Condition="!Exists('$(TargetDir)wwwroot\images\uploaded')" />
<MakeDir Directories="$(TargetDir)Themes" Condition="!Exists('$(TargetDir)Themes')" />
<MakeDir Directories="$(TargetDir)Themes" Condition="!Exists('$(TargetDir)Plugins')" />
</Target>
Here are the contents of my Program.cs file:
class Program
{
static async Task Main(string[] args)
{
var host = await Startup(args);
if(host != null)
{
using (host)
{
var productService = EngineContext.Current.Resolve<IProductService>();
}
}
}
public static async Task<IHost> Startup(string[] args)
{
var host = CreateHostBuilder(args).Build();
await host.StartAsync();
return host;
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseStartup<Startup>();
}).UseConsoleLifetime();
}
}
Then the contents of my Startup.cs file:
public class Startup
{
private readonly IConfiguration _configuration;
private readonly IWebHostEnvironment _webHostEnvironment;
private IEngine _engine;
private NopConfig _nopConfig;
public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment)
{
_configuration = configuration;
_webHostEnvironment = webHostEnvironment;
}
public void ConfigureServices(IServiceCollection services)
{
(_engine, _nopConfig) = services.ConfigureApplicationServices(_configuration, _webHostEnvironment);
}
public void ConfigureContainer(ContainerBuilder builder)
{
_engine.RegisterDependencies(builder, _nopConfig);
}
public void Configure(IApplicationBuilder application)
{
EngineContext.Current.ConfigureRequestPipeline(application);
}
}