Программирование arrow .NET Framework arrow Использование resx ресурсов в Visual Studio .NET

Использование resx ресурсов в Visual Studio .NET

Ненавидите resx файлы? Надоело в каждый новый проект включать класс ResourceHelper, не забывая при этом подправить namespace для ресурсов? Воспользуйтесь генератором для Visual Studio! Вас бесит, когда студия в resx файл вместо ссылки включает саму иконку? Ничего не поделаешь, придется поработать руками… Делается это при помощи класса ResXFileRef.

К сожалению, класс ResXResourceReader игнорирует имя resx файла и работает с его содержимым как с безликим потоком. Кроме того, механизм TypeConverter, с помощью которого он поднимает обработчик для конкретного типа ресурса, не позволяет получить никакой дополнительной информации кроме той, что есть непосредственно в resx файле.

Все это я говорю к тому, чтобы стало понятно, почему класс ResXFileRef работает только с абсолютными путями… Хотя, если быть точным, функция CreateFile может работать с относительными путями отсчитывая их от текущей директории для процесса. Проблема в том, что предсказать какая директория окажется текущей в каждом конкретном случае запуска Visual Studio невозможно…

Таким образом, у нас есть несколько путей решения проблемы:1.

Использовать абсолютные пути - не подходит, т.к. код у всех разработчиков лежит в разных местах 2.

Использовать переменные окружения, для указания корня проекта - не работает в случае нескольких версий продукта 3.

Каким-то образом выставлять в процессе компиляции (Pre-Build Step) текущую директорию для процесса devenv.exe

Именно по третьему пути мы и пошли, в результате чего на свет появилась маленькая утилита SetCurDir:

Process Current Directory Fixer (c) 2004 Digital Design


Usage: SetCurDir.exe
<new_current_dir> --- new current directory
[/pid <process_id>] --- process identifier
[/pname <process_name>] --- process name
[/?:help] --- show (this) usage information

Использовать ее очень просто, достаточно в свойства проекта в качестве Pre-build step указать команду:


SetCurDir /pname devenv.exe $(ProjectDir)

Ее использование приведет к тому, что текущая директория для процесса(-ов) devenv.exe будет указывать на корень проекта. В resx файле все пути должны быть относительными и все будет отлично.

 
« Предыдущая статья   Следующая статья »


  • .NET Framework, Оптимизация сериализации в .NET
    Приводятся код и методы, позволяющие разработчикам оптимизировать сериализацию данных....
  • .NET Framework, Плавающая точка в .NET - часть 1: принципы и форматы
    Данная статья представит основные принципы арифметических операций с плавающей точкой: числовые форматы, точности и достоверность, погрешности округления. Также в статью включено обсуждение типов плавающей запятой в .NET....
  • .NET Framework, JIT-оптимизации
    Компилятор .NET Just-In-Time Compiler (JIT) считается многими одним из основных преимуществ производительности CLR по сравнению с JVM и другими управляемыми средами, которые используют двоичный код, скомпилированный компилятором JIT. ...
  • .NET Framework, Инъекции CLR: замена методов во время выполнения
    Многие из нас, наверняка, были заинтересованы в том, как работает универсальный язык CLR. Одной из наиболее интересных вещей является динамический компилятор JIT (Just In Time Compiler). Мы рассмотрим то, как JIT компилирует MSIL и создадим утилиту, которая позволяет программным образом заменить любой метод (JIT) другим во время выполнения. Мы также создадим отладочную утилиту, которая прехватывает JIT-вызовы и выводит в консоль информацию о диагноcnbrt....
  • .NET Framework, Оптимизация запуска приложений .NET
    Ждать, пока приложение запустится, неприятно для многих пользователей, поэтому ускорение запуска приложений клиентов может значительно улучшить первое впечатление от вашей работы. И так как скорость запуска имеет значение, следует знать факторы, которые на нее влияют, чтобы избежать распространенных ошибок....
  • .NET Framework, Создание компилятора языка для .NET Framework
    Эксперты по компиляторам являются знаменитостями в компьютерном мире. Я видел, как Андерс Хейльсберг (Anders Hejlsberg) представлял презентацию на конференции разработчиков Professional Developers Conference и когда он сошел со сцены, его встретила целая орда мужчин и женщин, просящих поставить автограф на книгу, или сняться на фотографии вместе с ними. Люди, посвящающие свое время изучению и пониманию всех тонкостей лямбда-выражений, систем типов и языков сборки, кажутся своего рода носителями ...
  • .NET Framework, Маршалинг данных между управляемым и неуправляемым кодом
    Посмотрим правде в глаза: нет в мире совершенства. Мало кто при разработке использует только управляемый код. А между тем, тяжким грузом лежат устаревшие неуправляемые приложения, с которыми приходится мириться. Есть ли способ интегрировать проекты, в которых задействован как управляемый, так и неуправляемый код? Какой вид принимает этот способ: вызов неуправляемого кода из управляемого приложения или вызов управляемого кода из неуправляемого приложения?...
  • .NET Framework, IronPython как движок для макросов в .NET приложениях
    Подозреваю, многие из вас задумывались — как можно в .NET приложение добавить поддержку макросов — чтобы можно было расширять возможности программы без ее перекомпиляции и предоставить сторонним разработчикам возможность легко и просто получить доступ к API вашего приложения? В статье рассмотрено, как в качестве основы для выполнения макросов использовать IronPython — реализацию языка Python на платформе .NET....