2016-09-27 2 views
4

В моем коде я не вService Fabric приложения

if (!File.Exists(_configurationFileName)) {...} 

В ближайшее окно я сделал вызов Directory.GetCurrentDirectory() и он указал мне в папку «работы», а не "кода ", которую я бы ожидал.

Directory.GetCurrentDirectory() 
"C:\\SfDevCluster\\Data\\_App\\_Node_0\\My.Application.Type_App2\\work" 

Таким образом, мой конфигурационный файл, который находится рядом с исполняемым файлом, конечно, не найден.

Теперь мне интересно, что это за решение.
Поскольку я также хочу продолжать работать с консольным приложением, я не хочу реализовывать какой-либо «хостинг, а затем изменить текущий каталог, ...».

Любые рекомендации? Как насчет моих файлов .exe.config (если бы у меня было, как бы их найти)?

В чем причина того, что Service Fabric устанавливает текущую директорию на «работу»? Это какой-то механизм безопасности?

+0

Та же проблема здесь с веб-сайта и видом .. – user1496062

ответ

7

Это, как я только что сделал это изменить службу манифеста к точке кода

<EntryPoint> 
    <ExeHost> 
    <Program>configui.exe</Program> 
    <WorkingFolder>CodePackage</WorkingFolder> 
    </ExeHost> 
</EntryPoint> 
+2

«CodeBase», а не «CodePackage», но да - каким-то образом помощник проекта не добавил эту информацию в мое определение сервиса. – lapsus

+0

В моем случае я скопировал веб-сайт в не-веб-проект. Я нашел его на новом сайте из шаблона, который работал и выполнял сравнение. – user1496062

0

Вы можете выбрать действие сборки как «контент» и выбрать «копировать, если новое» в свойствах, чтобы оно было скопировано в выходную папку.

+0

Это не моя проблема. Конфигурационные файлы там, где я их ожидаю. Мой «текущий каталог» - нет. – lapsus

0

Вы можете сделать некоторое простое отражение и получить папку, в которой находится исполняющая сборка, а затем ссылаться на этот файл в этом месте. Я сделал это успешно для вспомогательного файла, который мне нужен, который был развернут в той же папке, что и мой исполняемый файл.

string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string filePath = Path.Combine(Path.GetDirectoryName(exePath), "myfilename.txt"); 
0

Настройка «Режим приложения Debug», чтобы «держать приложение» решить подобную проблему у меня был где мой файлы не копировались в конечную область развертывания в моей локальной структуре сервиса.

Было установлено значение «Обновить приложение», которое находится в режиме предварительного просмотра, когда я печатаю это. Но этот режим не копировал мою папку wwwroot, поэтому мой механизм просмотра (в данном случае Нэнси) не нашел мои взгляды.

щелкните правой кнопкой ткань проект службы> Свойства> Application> Application Mode Debug> Keep вку

Смежные вопросы