ABP框架无法访问部署中的虚拟文件



我正在使用ABP框架,我正在实现我自己的邮件模板。

项目是使用abp项目模板创建的。我在我的应用程序模块中创建了模板:Acme.Bookstore.Application/Assets/Templates/MyEmailTemplate.tpl。我编辑了要嵌入的文件的属性。

然后我创建了一个模板定义提供程序的实例,如下所示:

public class MyEmailTemplateDefinitionProvider : TemplateDefinitionProvider
{
public override void Define(ITemplateDefinitionContext context)
{
context.Add(
new TemplateDefinition(
MyEmailTemplates.MyEmailTemplate,
displayName: LocalizableString.Create<AccountResource>($"TextTemplate:{MyEmailTemplates.MyEmailTemplate}"),
layout: StandardEmailTemplates.Layout,
localizationResource: typeof(AccountResource)
).WithVirtualFilePath($"Assets/Templates/MyEmailTemplate.tpl", true)
);
}
}

然后我将以下行添加到我的BookstoreApplicationModule.cs

Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<BookstoreApplicationModule>("Acme.Bookstore");
});

我按照这个文档做了所有这些:https://docs.abp.io/en/abp/5.3/Virtual-File-System

在本地调试时一切正常,但是当我部署项目时,它无法访问模板文件。错误如下:Volo.Abp.AbpException: Could not find a file/folder at the location: Assets/Templates/MyEmailTemplate.tpl

我已经尝试在HttpApi.Host模块中添加AddEbedded调用,但得到了相同的结果。我不知道我错过了什么。

郑重声明,我是在Ubuntu服务器上部署的,但这应该无关紧要。

问题是嵌入的文件没有被添加到VirtualFileSystem中。它在开发中工作是因为框架调用:

if (hostingEnvironment.IsDevelopment())
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
... Some code ...
options.FileSets.ReplaceEmbeddedByPhysical<BookstoreApplicationModule>(
Path.Combine(hostingEnvironment.ContentRootPath,
$"..{Path.DirectorySeparatorChar}Acme.Bookstore.Application"));
});
}

所以问题没有出现,直到我做了一个dotnet publish

我无法弄清楚为什么它不能在Application模块上工作,但将文件移动到Domain.Shared模块修复了它。

我猜其他模块上缺少一些包或设置,但这个解决方案对我来说已经足够了。

最新更新