Проблема
Мое решение состоит из нескольких проектов. Основным для пользовательского интерфейса мы будем называть Assistant, а бэкэнд мы будем называть AssistantLib.
Вот структура:
В AssistantLib я включил PDF-файлы в качестве ресурсов в папку ресурсов с Build Action
из Содержимое и Copy to Output Directory
как Копировать всегда . Я могу найти их при отладке, используя комбинацию из них:
private string GetArtifactPath(string artifactName)
{
return Path.Combine(GetResourcePath(), artifactName);
}
public static string GetResourcePath()
{
return Path.Combine(Directory.GetCurrentDirectory(), "Resources");
}
Это работает. Когда я возвращаю строку из GetArtifactPath, я открываю файл с Process
объектом и AcroRd32.exe
.
Обратите внимание, что мне нужно ссылаться на эти файлы по их путям к файлам. Они не простые тексты для чтения или потоковой передачи. Мне также нужно иметь возможность открывать их с определенным флагом, указанным AcroRd32.exe
. Это означает, что У меня должен быть путь к файлу .
Проблема, с которой я сталкиваюсь, когда я публикую sh приложение ClickOnce, я получаю сообщение об ошибке, что файл не может быть найдено:
Error: Could not find a part of the path 'C:\Users\EL-C\AppData\Local\Apps\2.0\3JCPDD49.7G5\9122AMZE.NZL\azte..tion_edea8654ffceff97_0001.0000_447ed0da08290357\Resources\Guidelines\3.2'.. Stacktrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
И, конечно, когда я go в это место, ресурсов там нет.
То, что я пробовал
- Я изменил
Build Action
на Встроенный ресурс и ничего - тот же результат - Я изменил
Copy Output Directory
на Не копировать - Это не применяется, потому что я не могу транслировать эти ресурсы, они не простые текстовые файлы. Я также не пытаюсь их прочитать, я пытаюсь открыть их.
- Это также не применяется, потому что ссылка
MyNamespace.Properties.Resources.My_Zip_File;
не работает в моей ситуации. Я не знаю название ресурса раньше времени.
Обновление
Я изучаю события после сборки. При этом я обнаружил, что эти ресурсы уже в выходном каталоге после сборки:
Но по какой-то причине они не отображаются, когда я публикую sh:
Обновление 2
Для иллюстрации как структура папок влияет на это, здесь до и после.
Когда ресурс находится в AssistantLib
(например, EVMSBP), это структура:
А вот как выглядит папка ClickOnce publi sh после установки с ресурсом в AssistantLib
:
В качестве альтернативы, когда ресурс находится в Assistant
(снова EVMSBP), это структура:
И вот что публикует ClickOnce * Папка 1123 * выглядит после установки с ресурсом в Assistant
:
Насколько я могу судить, Ресурс ДОЛЖЕН быть частью Проект запуска. Это звучит как безумие?
Чего мне не хватает?