:: Не фоксом единым
Зачем такой путь к файлу
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
На msdn.microsoft.com пример - как из кода создать resx файл, а потом по этому файлу сгенерировать вспомогательный класс. Создал проект, добавил туда код примера, получил ошибку - нет такого файла. Добавил Logo.bmp в проект, поставил "копировать в исходящую папку" - заработало. Вот только не понятно, зачем в примере в имени файла стоят точка и слэш:

Bitmap logo = new Bitmap(@".\Logo.bmp");
ResXResourceWriter rw = new ResXResourceWriter(@".\Demo.resx");

Меняю на
Bitmap logo = new Bitmap(@"Logo.bmp");
ResXResourceWriter rw = new ResXResourceWriter(@"Demo.resx");

Всё работает точно так же, файлы создаются в тех же местах.

Опять таки, не понятно - почему отсутствует "точка и слеш" в :

CodeCompileUnit code = StronglyTypedResourceBuilder.Create("Demo.resx", "DemoResources",
Ratings: 0 negative/0 positive
Зачем такой путь к файлу
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
И ещё. Мне не нужен файл Logo.bmp в папке с приложением - он же уже есть в resx. Убирал "Копировать в исходящую папку", подправил:

Bitmap logo = new Bitmap(@"..\..\Logo.bmp");

Заработало - resx создаётся. Но, как то корявенько это выглядит. Можно как то иначе задать папку приложения?
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
S-type
Создал проект, добавил туда код примера, получил ошибку - нет такого файла. Добавил Logo.bmp в проект, поставил "копировать в исходящую папку" - заработало.
Это естественно. Твой проект скомпилировался в 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" ничего и не находит.
S-type
Вот только не понятно, зачем в примере в имени файла стоят точка и слэш:
Это можно и опустить - разрешение путей к файлам в винде (преобразование относительных путей в полные) и так будет искать файл "Logo.bmp" в текущей папке. точка+слэш - просто явное указание "текушая папка".

S-type
Мне не нужен файл Logo.bmp в папке с приложением
Я не понимаю зачем тебе вообще нужен ресурс-билдер и ресурс-райтер. Это инструменты времени компиляции. Т.е. если ты пишешь, к примеру, свой "генератор проектов", или какие-то расширения к студии... Для прикладного ПО эти классы не нужны - ресурсы там создаются встроенными инструментами VS (которые, в свою очередь, наверняка используют данные классы).
S-type
Но, как то корявенько это выглядит.
Естественно. И работать будет только если запускать из этого конкретного output, не перемещать его, не пытаться для "соседних" проектов применить.
Твой exe собрался в "папка_проекта/bin/debug" (ну или release - смотря что в студии выбрал на момент запуска). Оттуда как раз ../../ переходит в просто "папка_проекта" и видит файлы там размещённые - независимо от того включены они в сам проект или нет.
Но так, конечно же, делать не следует.

Если ты зачем-то и будешь делать exe-ник генератор-ресурсов (Но ещё раз зачем? В студии и так есть resgen - если уж надо из консоли запускать), то ему стоит через параметры командной строки передавать все эти файлы/пути/имена_классов/пространств_имён и т.п.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
Я не понимаю зачем тебе вообще нужен ресурс-билдер и ресурс-райтер. Это инструменты времени компиляции. Т.е. если ты пишешь, к примеру, свой "генератор проектов", или какие-то расширения к студии... Для прикладного ПО эти классы не нужны - ресурсы там создаются встроенными инструментами VS (которые, в свою очередь, наверняка используют данные классы).
Нет, целый проект генерировать не надо. Генерировать нужно только один статический класс. Предположим, у нас есть 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
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Если в свойствах resx файла в Custom Tool указать PublicResXFileCodeGenerator, то можно увидеть:

Так же, в контекстном меню появляется кнопка:

[attachment 29851 s3.png]

По сути, было бы идеально - написать что то подобное этому PublicResXFileCodeGenerator. Пошёл посвящаться.
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
S-type
Доступ через intellisense - программистам удобно
От количества элементов зависит. Если это ВСЕ тексты в ПО, то их там сотни и даже тысячи - и никакой интеллисенс тут не поможет...
S-type
Задача - перенести текст из resx в базу.
На время разработки, или и во время исполнения тоже данные из БД подтягиваться будут?
Если первое - то не вопрос. Так и генерируй resx и cs - правда см. выше, при количестве элементов за сотню (на 1 класс, если всё побито на мелкие части, и в каждой будет немного "строковых ресурсов" то ок) это не "помощь" будет, а реальный кошмар.
И да, это будет небольшая утилита класса "генератор [небольшой части] проекта". Т.е. утилита для разработки, а не для времени исполнения - посему она в отдельном проекте должна писаться, а к основному "прикладному", подключаться в "готовом виде" через интеграцию со студией (лучше тогда её с использованием VS SDK ваять - чтобы была как штатное "расширение" в студии), или с каким-либо вашим другим инструментом (может CI, может VCS, да даже банальный батник который разраб прикладной части будет запускать для генерации этих файлов). Т.е. тогда "всё правильно" по сути.
Кстати, в свежих студиях есть "C# interactive" - туда типа "скрипты" можно подключить, C# код выполняемый в дизайн-тайме. Ну похоже на фоксовое Command Window, откуда можно запустить какую-нить "утилиту-генератор чего либо", или просто кусок кода исполнить. Т.е. возможно даже и не надо в отдельный проект и exe всё это хозяйство оформлять

Если же ты думаешь каким-то образом через ресурсы вынимать данные из БД во время исполнения программы - забудь, оно не для этого Ещё из Setting-ов, при помощи самописного "провайдера конфигурации" как-то можно, но не в части "ресурсов".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
S-type
Доступ через intellisense - программистам удобно
От количества элементов зависит. Если это ВСЕ тексты в ПО, то их там сотни и даже тысячи - и никакой интеллисенс тут не поможет...
Да, сейчас всё в одном resx, и это не очень удобно. Предполагается двухуровневая структура - с разбивкой по формам (cschml).

Igor Korolyov
S-type
Задача - перенести текст из resx в базу.
На время разработки, или и во время исполнения тоже данные из БД подтягиваться будут?
Только на время разработки. Все ресурсы должны грузиться только при старте программы. База нужна только для генерации статического класса.

Igor Korolyov
Если первое - то не вопрос. Так и генерируй resx и cs - правда см. выше, при количестве элементов за сотню (на 1 класс, если всё побито на мелкие части, и в каждой будет немного "строковых ресурсов" то ок) это не "помощь" будет, а реальный кошмар.
Сделать, что бы генерировалось столько resx файлов, сколько в программе cschml? Тогда и двухуровневая система не нужна - разбивка уже есть. Надо подумать....

Igor Korolyov
И да, это будет небольшая утилита класса "генератор [небольшой части] проекта". Т.е. утилита для разработки, а не для времени исполнения - посему она в отдельном проекте должна писаться,
Именно так.

Igor Korolyov
а к основному "прикладному", подключаться в "готовом виде" через интеграцию со студией (лучше тогда её с использованием VS SDK ваять - чтобы была как штатное "расширение" в студии), или с каким-либо вашим другим инструментом (может CI, может VCS,
Вот тут мне надо покурить над всеми этими VS SDK, CI и VCS...

Igor Korolyov
да даже банальный батник который разраб прикладной части будет запускать для генерации этих файлов). Т.е. тогда "всё правильно" по сути.
Это понятно.

Igor Korolyov
Если же ты думаешь каким-то образом через ресурсы вынимать данные из БД во время исполнения программы - забудь, оно не для этого Ещё из Setting-ов, при помощи самописного "провайдера конфигурации" как-то можно, но не в части "ресурсов".
Не, и мысли такой не было.

Спасибо за помощь - полез читать про новые термины.
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Хм, а зачем вообще "строковые ресурсы" для "текстового" cshtml то? Чем не устраивает прописывание текстов прямо во вью? Мультиязычность? Но по идее это иными средствами делается... Или речь таки про cs код (модели, контроллера) - там тоже нужны юзерские тексты, в тех же атрибутах валидации, да и просто по коду...
Посмотри ещё "T4 Text Templates". Они (шаблоны т4), к примеру, генерируют код контроллера и "текст" вью по соответствующим командам IDE "добавить контроллер/вью" в MVC проекте. И можно даже в самом проекте завести папку, где держать изменённые/совсем_самодельные шаблоны (так то они где-то в недрах папок студии или СДК лежат) и они даже будут подхватываться IDE


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
Хм, а зачем вообще "строковые ресурсы" для "текстового" cshtml то? Чем не устраивает прописывание текстов прямо во вью? Мультиязычность?
Да. Есть такое желание (не у меня) - завоевать мир

Igor Korolyov
Но по идее это иными средствами делается... Или речь таки про cs код (модели, контроллера) - там тоже нужны юзерские тексты, в тех же атрибутах валидации, да и просто по коду...

Увы, не могу влиять на архитектуру проекта.
Ratings: 0 negative/0 positive
Re: Зачем такой путь к файлу
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Мультиязычность это хорошо, но при чём тут ресурсы то, да ещё и в веб-проге (как я понял речь про неё) ?


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 7 (Гостей: 7)

© 2000-2024 Fox Club 
Яндекс.Метрика