我在ASPNET Core Web API中遇到一个奇怪的问题:
API证明是一个excel模板,以便允许用户填充数据并上传到系统。 这个excel模板位于项目内部,并且对文件的访问由资源文件(resx)管理,因为根据区域性存在不同的文件
作为已知主题,本地操作没有任何问题,但是,一旦部署,此下载模板将失败,日志中的错误如下:
异常消息:无法将类型为“ System.String”的对象转换为类型为“ System.Byte []”。
这是在csproj中管理文件的方式:
<ItemGroup>
<None Remove="Resources\Templates\ImportTemplate-fr-FR.xlsx" />
<None Remove="Resources\Templates\ImportTemplate.xlsx" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\Templates\ImportTemplate-fr-FR.xlsx" />
<EmbeddedResource Include="Resources\Templates\ImportTemplate.xlsx" />
</ItemGroup>
这是resx文件检索文件的方式:
_documentExcelImportService.GetTemplate(Resources.ImportExcelTemplate);
我也尝试了“总是复制”,结果相同
请注意,我们将应用程序部署到本地服务器以及Azure AppService
有什么主意吗?
提前谢谢
更新A (yolo sora问题):
GetTemplate正在直接检索字节数组并在DTO中封装更多信息,resx会自动对其进行管理:
public Document GetTemplate(byte[] resourceByteArray)
{
return new Document
{
FileName = GetFullFileName(),
FileBlob = resourceByteArray,
CreationDate = DateTime.Now,
};
}
更新B
对日志进行了深入检查,我发现在尝试访问资源文件(resx)时,它将转到在管道进行编译的Azure代理服务器中创建的物理路径。很奇怪,但是,据我所知,我尝试手动发布,并通过此手动构建成功了!
所以似乎如何管理资源文件或引用...
想法?