Зачем такой путь к файлу | |
---|---|
S-type Сообщений: 2969 Дата регистрации: 24.04.2004 |
На msdn.microsoft.com пример - как из кода создать resx файл, а потом по этому файлу сгенерировать вспомогательный класс. Создал проект, добавил туда код примера, получил ошибку - нет такого файла. Добавил Logo.bmp в проект, поставил "копировать в исходящую папку" - заработало. Вот только не понятно, зачем в примере в имени файла стоят точка и слэш:
Меняю на
Всё работает точно так же, файлы создаются в тех же местах. Опять таки, не понятно - почему отсутствует "точка и слеш" в :
|
Зачем такой путь к файлу | |
---|---|
S-type Сообщений: 2969 Дата регистрации: 24.04.2004 |
И ещё. Мне не нужен файл Logo.bmp в папке с приложением - он же уже есть в resx. Убирал "Копировать в исходящую папку", подправил:
Заработало - resx создаётся. Но, как то корявенько это выглядит. Можно как то иначе задать папку приложения? |
Re: Зачем такой путь к файлу | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Это естественно. Твой проект скомпилировался в exe в папке (если всё оставлено по умолчанию) /bin/debug внутри папки проекта. При компиляции там окажется лишь то содержимое, которое обрабатывается проектом - т.е. помимо собственно создаваемых dll/exe это будут pdb, xml (если генерация дебаг-символов явно не отключена, а хмл-документации явно включена) имя_проекта.config если в проекте есть app.config, ну и те из референс-библиотек для которых указано CopyLocal=true (обычно это библиотеки из нугет-пакетов, или не помещённые в GAC). Плюс к тому в output папку (так она называется) будут скопированы файлы из output папок референс-проектов (тех проектов, на которые ссылается данный). "Простые файлы" попадут туда только если будут указаны в проекте, и для них будет указан один из вариантов Copy* в свойстве "Copy to output directory". При запуске на исполнение по умолчанию будет запущен именно созданный в этой output папке exe, и именно эта папка и будет для этого процесса "папкой по умолчанию" (хотя это можно поменять в опциях проекта - раздел Debug. Там же, кстати, и параметры командной строки можно задать для запускаемой программы). Потому не указав файл в проекте и не задав для него "копировать в output" ты его и не имеешь в папке с exe, соответственно обращение к нему - хоть через "Logo.bmp" хоть через ".\Logo.bmp" ничего и не находит. Это можно и опустить - разрешение путей к файлам в винде (преобразование относительных путей в полные) и так будет искать файл "Logo.bmp" в текущей папке. точка+слэш - просто явное указание "текушая папка". Я не понимаю зачем тебе вообще нужен ресурс-билдер и ресурс-райтер. Это инструменты времени компиляции. Т.е. если ты пишешь, к примеру, свой "генератор проектов", или какие-то расширения к студии... Для прикладного ПО эти классы не нужны - ресурсы там создаются встроенными инструментами VS (которые, в свою очередь, наверняка используют данные классы). Естественно. И работать будет только если запускать из этого конкретного output, не перемещать его, не пытаться для "соседних" проектов применить. Твой exe собрался в "папка_проекта/bin/debug" (ну или release - смотря что в студии выбрал на момент запуска). Оттуда как раз ../../ переходит в просто "папка_проекта" и видит файлы там размещённые - независимо от того включены они в сам проект или нет. Но так, конечно же, делать не следует. Если ты зачем-то и будешь делать exe-ник генератор-ресурсов (Но ещё раз зачем? В студии и так есть resgen - если уж надо из консоли запускать), то ему стоит через параметры командной строки передавать все эти файлы/пути/имена_классов/пространств_имён и т.п. ------------------ WBR, Igor |
Re: Зачем такой путь к файлу | |
---|---|
S-type Сообщений: 2969 Дата регистрации: 24.04.2004 |
Нет, целый проект генерировать не надо. Генерировать нужно только один статический класс. Предположим, у нас есть Demo.resx (который XML). На самом деле, в проекте помимо Demo.resx ещё есть файл Demo.Designer.cs со статическим класcом Demo. Именно с его помощью можно извлечь Logo.bmp: [attachment 29849 s2.png] Доступ через intellisense - программистам удобно. Сейчас в программе тексты сообщений находятся в resx файле. Задача - перенести текст из resx в базу. Но, отказываться от intellisense нельзя. Вопрос: как сделать, что бы данные находились в базе, но при этом при разработке программы были доступны по intellisense? Думаю, надо сделать какой то генератор, который формирует по таблице из базы некий статический класс. В какой то момент (например, по нажатию какой то кнопки в VisualStudio) происходит формирование/обновление данного файла. Как мне видится, самое простое в данном случае - из таблицы формировать XML (resx файл), а уж потом генерировать статический класс. Хотя, может будет быстрее прямо из таблицы класс с enum генерировать. Тут ещё думать надо. Исправлено 4 раз(а). Последнее : S-type, 09.08.18 17:38 |
Re: Зачем такой путь к файлу | |
---|---|
S-type Сообщений: 2969 Дата регистрации: 24.04.2004 |
|
Re: Зачем такой путь к файлу | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
От количества элементов зависит. Если это ВСЕ тексты в ПО, то их там сотни и даже тысячи - и никакой интеллисенс тут не поможет... На время разработки, или и во время исполнения тоже данные из БД подтягиваться будут? Если первое - то не вопрос. Так и генерируй resx и cs - правда см. выше, при количестве элементов за сотню (на 1 класс, если всё побито на мелкие части, и в каждой будет немного "строковых ресурсов" то ок) это не "помощь" будет, а реальный кошмар. И да, это будет небольшая утилита класса "генератор [небольшой части] проекта". Т.е. утилита для разработки, а не для времени исполнения - посему она в отдельном проекте должна писаться, а к основному "прикладному", подключаться в "готовом виде" через интеграцию со студией (лучше тогда её с использованием VS SDK ваять - чтобы была как штатное "расширение" в студии), или с каким-либо вашим другим инструментом (может CI, может VCS, да даже банальный батник который разраб прикладной части будет запускать для генерации этих файлов). Т.е. тогда "всё правильно" по сути. Кстати, в свежих студиях есть "C# interactive" - туда типа "скрипты" можно подключить, C# код выполняемый в дизайн-тайме. Ну похоже на фоксовое Command Window, откуда можно запустить какую-нить "утилиту-генератор чего либо", или просто кусок кода исполнить. Т.е. возможно даже и не надо в отдельный проект и exe всё это хозяйство оформлять Если же ты думаешь каким-то образом через ресурсы вынимать данные из БД во время исполнения программы - забудь, оно не для этого Ещё из Setting-ов, при помощи самописного "провайдера конфигурации" как-то можно, но не в части "ресурсов". ------------------ WBR, Igor |
Re: Зачем такой путь к файлу | |
---|---|
S-type Сообщений: 2969 Дата регистрации: 24.04.2004 |
Да, сейчас всё в одном resx, и это не очень удобно. Предполагается двухуровневая структура - с разбивкой по формам (cschml). Только на время разработки. Все ресурсы должны грузиться только при старте программы. База нужна только для генерации статического класса. Сделать, что бы генерировалось столько resx файлов, сколько в программе cschml? Тогда и двухуровневая система не нужна - разбивка уже есть. Надо подумать.... Именно так. Вот тут мне надо покурить над всеми этими VS SDK, CI и VCS... Это понятно. Не, и мысли такой не было. Спасибо за помощь - полез читать про новые термины. |
Re: Зачем такой путь к файлу | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Хм, а зачем вообще "строковые ресурсы" для "текстового" cshtml то? Чем не устраивает прописывание текстов прямо во вью? Мультиязычность? Но по идее это иными средствами делается... Или речь таки про cs код (модели, контроллера) - там тоже нужны юзерские тексты, в тех же атрибутах валидации, да и просто по коду...
Посмотри ещё "T4 Text Templates". Они (шаблоны т4), к примеру, генерируют код контроллера и "текст" вью по соответствующим командам IDE "добавить контроллер/вью" в MVC проекте. И можно даже в самом проекте завести папку, где держать изменённые/совсем_самодельные шаблоны (так то они где-то в недрах папок студии или СДК лежат) и они даже будут подхватываться IDE ------------------ WBR, Igor |
Re: Зачем такой путь к файлу | |
---|---|
S-type Сообщений: 2969 Дата регистрации: 24.04.2004 |
Да. Есть такое желание (не у меня) - завоевать мир
Увы, не могу влиять на архитектуру проекта. |
Re: Зачем такой путь к файлу | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Мультиязычность это хорошо, но при чём тут ресурсы то, да ещё и в веб-проге (как я понял речь про неё) ?
------------------ WBR, Igor |
© 2000-2024 Fox Club  |