У меня странная проблема в ASPNET Core Web API:
API проверяет шаблон Excel, чтобы позволить пользователю заполнить данные и загрузить их в систему. Этот шаблон Excel находится внутри проекта, а доступ к файлу управляется файлом ресурсов (resx), поскольку в зависимости от культуры существуют разные файлы
Локально, как и в известной теме, работает без проблемоднако после развертывания этот шаблон загрузки завершается сбоем, ошибка в журналах выглядит следующим образом:
ИСКЛЮЧИТЕЛЬНОЕ СООБЩЕНИЕ: Невозможно привести объект типа 'System.String' к типу 'System. Байт[]'.
Вот как файл управляется в 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, результат -автоматически управляя этим:
public Document GetTemplate(byte[] resourceByteArray)
{
return new Document
{
FileName = GetFullFileName(),
FileBlob = resourceByteArray,
CreationDate = DateTime.Now,
};
}
ОБНОВЛЕНИЕ B
После тщательной проверки журнала я могу обнаружить, что при попытке доступа к файлу ресурсов (resx), идет по физическому пути, который был создан на сервере агента Azure, где его скомпилировал конвейер. Это довольно странно, но, как только я увидел, я попытался опубликовать вручную, и с этой ручной сборкой все работает!
Похоже, проблема в том, как управлять файлами ресурсов или ссылками ...
Идеи?