Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройка подключенных «References» к проекту С#, В среде разработки Visual Studio 2008 
V
    Опции темы
DigitalDummy
  Дата 14.7.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 7.4.2006
Где: В подвале шоколад ной фабрики.

Репутация: 1
Всего: 2



Здоровья вам, и разуменья, грандиозные умы форума Винград!

Есть ли возможность, каким-то образом задавать для проекта список References, если часто нужно туда подключать\отключать какой-то один элемент (из своего набора) чтобы просто «сбилдить» несколько разных версий одной программы?

Например, я вижу крайне удобным решением (если такое возможно) создать несколько конфигураций проекта. Это там, где изначально обычно только «Debug» и «Release», я бы добавил себе «Release (with Lib_A)», «Release (with Lib_B)» и так далее. (В С++ проектах у меня уже было такое решение и там различался набор «дефайнов» препроцессора или набор *.lib подключений.)

Все это надо провернуть в рамках среды Visual Studio. Если задал вопрос не в тот раздел форума, то прошу прощения у модераторов.

Дополнение темы:
Основной проект постоянно меняется (дополняется новыми модулями, файлами ресурсов и т.д.). Создавать несколько разных его копий, отличающихся только списком подключенных References гораздо сложнее в обновлении, чем в ручную их менять у одной копии проекта. Так что, вариант с разными копиями основного проекта не подходит. Спасибо, Partizan за первое предложенное решение и развитие темы.

На данный момент у меня следующие возможные идеи:
  •  Использовать компилятор через командную строку для сборки проекта (с параметрами, если такие есть, использования References подключений).
  •  Править файл проекта (он вроде бы в формате XML) с помощью своей небольшой утилиты. Потом запускать компиляцию через командную строку.
  •  Использовать встроенные в Visual Studio макросы (на Visual Basic), чтобы проводить изменения проекта в один клик.

Может быть эти идеи вам помогут, чтобы помочь мне.

Большое спасибо за любую помощь и советы.

Это сообщение отредактировал(а) DigitalDummy - 14.7.2008, 18:02
PM WWW   Вверх
Partizan
Дата 14.7.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



DigitalDummy, не знаю как в рамках среды....а вот созданием нескольких вариаций одного и того же *.csproj файла я думаю эту задачу решить можно...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
DigitalDummy
Дата 14.7.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 7.4.2006
Где: В подвале шоколад ной фабрики.

Репутация: 1
Всего: 2



Спасибо за ответ, Partizan,
Это решение не подходит. Основной проект постоянно меняется (дополняется новыми модулями, файлами ресурсов и т.д.). Создавать несколько разных его копий, отличающихся только списком подключенных References гораздо сложнее в обновлении, чем в ручную их менять у одной копии проекта. (Обновил описание темы в соответствие с этим условием.)

Это сообщение отредактировал(а) DigitalDummy - 14.7.2008, 18:03
PM WWW   Вверх
Partizan
Дата 14.7.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



DigitalDummy, ну когда я  говорил про несколько копий *csproj - это решение тоже подразумевалось как возможное smile

Цитата

Править файл проекта (он вроде бы в формате XML) с помощью своей небольшой утилиты. Потом запускать компиляцию через командную строку.


Добавлено через 7 минут и 36 секунд
DigitalDummy, как ещё один вариант(в продолжение варианта с правкой файла проекта с помощью утилиты):
1. пусть улитита правит файл проекта в зависимости допустим от аргументов командной строки
2. пусть затем запускает msbuild.exe и собирает проект в нужной конфигурации
3. пусть утилита затем восстанавливает файл проекта в исходное состояние

4. это всё можно затем прописать в качестве prebuild/postbuild events разных конфигураций...

чуть по-извращенски, но всё же =)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
jonie
Дата 14.7.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



грузите сборки динамически 8)
а так стандартными методами vs низя вроде как


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
DigitalDummy
  Дата 14.7.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 7.4.2006
Где: В подвале шоколад ной фабрики.

Репутация: 1
Всего: 2



Спасибо, jonie, за попытку. Динамически грузить мне тоже не подходит. Мне нужен готовый продукт в нескольких вариациях. Без всякого лишнего.

Спасибо, Partizan, за извращенческий вариант.

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

В оболочке Visual Studio есть знакомые всем определения: Solution и Project.
Solution, говоря в общих чертах, просто объединяет в себе группу из одного и более Проектов (Project). Проект, в свою очередь, уже несет в себе ссылки на исходные файлы, файлы ресурсов, настройки компиляции, сборки и прочее. То есть, всю лабудень, которая нужна для великого процесса создания исполняемого файла (библиотеки или прочей чертовщины — ну, вы меня поняли).

Проект сам по себе является текстовым XML файлом с набором свойств и параметров проекта. Здесь и ссылки на исходные файлы, и просто настройки проекта.

Ну, а одна из главных прелестей оболочки Visual Studio в том, что она все-таки предоставляет возможность разработчику иметь для каждого Проекта (и для «Солюшена» тоже), набор конфигураций. Ну, там, «Debug», «Release». Понимаем? Ага.

Так вот, различные функции оболочки Visual Studio, к сожалению, скрыты от среднестатистического ленивого разработчика, нежелающего читать дебри справочной системы. К этой же функции относится и возможность внести в файл своего Проекта специальные условные параметры, которые будут различаться для каждой «конфигурации проекта».

Ход событий:

1) Как добавить новую «конфигурацию», я рассказывать здесь не буду. Это все и так уже должны знать, потому что это все делается через интерфейс Visual Studio. Скажу только, что я добавил в свой основной проект конфигурацию с идентификатором «Release.Ref.1».

2) Теперь, я вручную добавил нужный мне «Reference» к своему основному проекту. Как если бы я собирался «сбилдить» один из нужных вариантов моей программы.

3) Но, «билдить» я больше не хочу как обычно, вручную меняя «Reference» список. Надоело! Сохраняю все изменения и закрываю студию.

4) Нахожу свой файл Проекта и открываю в обычном текстовом редакторе.

5) Ищу следующий набор параметров:
Код

    <ItemGroup>
      <ProjectReference Include="..\MyProject_Ref_1\MyProject_Ref_1.csproj">
        <Project>{здесь гуид вашего проекта «референса»}</Project>
        <Name>MyProject_Ref_1</Name>
      </ProjectReference>
    </ItemGroup>

Именно этот набор параметров отвечает за подключение к моему проекту другого моего проекта как «Reference». Для примера, подключаемый проекта тут называется «MyProject_Ref_1».

6) И тут, я, начитавшись перед этим документации, самым магическим образом редактирую данный набор параметров в следующую конструкцию:
Код

  <!-- My very own magically edited custom project properties : Begin -->
  <Choose>
    <When Condition=" '$(Configuration)'=='Release.Ref.1' ">
      <ItemGroup>
      <ProjectReference Include="..\MyProject_Ref_1\MyProject_Ref_1.csproj">
        <Project>{здесь гуид вашего проекта «референса»}</Project>
        <Name>MyProject_Ref_1</Name>
      </ProjectReference>
      </ItemGroup>
    </When>
  </Choose>
  <!-- My very own magically edited custom project properties : End -->


С помощью этой конструкции параметров я получаю настраиваемый «билд» проекта только при активной конфигурации проекта с идентификатором «Release.Ref.1». Практически любые параметры проекта (не только список «референсов») можно задавать таким образом. Проект будет отлично открываться в студии как обычный (если, конечно, не ошибиться в синтаксисе). Это дает богатые возможности для автоматизации труда разработчика. Примите мой совет, кто ещё не знает.

Вуаля, господа! Всем спасибо.

P.S. Можно было бы ещё рассказать как я написал «*.bat» файл для «билда» всех вариантов каждой нужной конфигурации моего «Солюшена». Но, это уже гораздо проще и в рамки данной темы не входит.

P.P.S.S. Читаем справку, господа, проявляем внимание и выдержку, и жизнь станет успешнее. Дополнительную информацую искать тут:

Для расширенных параметров проекта:
MSDN, Раздел «MSBuild Conditional Constructs»

Для «билда» с помощью «батника»: 
MSDN, Раздел «Devenv Command Line Switches»

Это сообщение отредактировал(а) DigitalDummy - 14.7.2008, 23:33
PM WWW   Вверх
Idsa
Дата 15.7.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



DigitalDummy, не нравится мне Ваш тон :(
А решение отличное. Это плюс.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
DigitalDummy
Дата 15.7.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 7.4.2006
Где: В подвале шоколад ной фабрики.

Репутация: 1
Всего: 2



Idsa, прошу простить коль что-то вам не понравилось в тоне.

Пишу ровно так, как приятно и весело было бы услышать это всё мне самому. Вот был бы я клоном самого себя, ровно так бы и зачитался с восторгом.

Простите!
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1296 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.