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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение информации о проектах из файла солюшена 
:(
    Опции темы
_Dream
Дата 4.11.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет собственно сабж. 
есть файл .sln например след содержания:

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceLocaleChecker", "ResourceLocaleChecker.csproj", "{3DE44362-1B46-46EB-88BE-50C30A69D7B4}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {3DE44362-1B46-46EB-88BE-50C30A69D7B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {3DE44362-1B46-46EB-88BE-50C30A69D7B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {3DE44362-1B46-46EB-88BE-50C30A69D7B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {3DE44362-1B46-46EB-88BE-50C30A69D7B4}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal

в нем как видно хранится информация о проектах(в этом 1 проект) - "ResourceLocaleChecker" - название проекта + это его путь относительно самого файла солюшена. 
как мне получить эту инфу?
можно тупо Regex'om вытащить но должен быть и другой способ.. что нить с Assembly или еще чем. Заранее спасибо.
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
mr.DUDA
Дата 4.11.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

Репутация: 110
Всего: 232



.sln - обычный текстовый файл, Assembly здесь не поможет. При загруженном солюшене можно получить эту инфу используя классы из пространства имён EnvDTE, для этого нужно написать свой add-in для студии или макрос.


--------------------
user posted image
PM MAIL WWW   Вверх
_Dream
Дата 4.11.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ой а можно чуть подробнее я ничего этого не знаю  smile 
а то как прочел сразу захотелось regex'om воспользоваться  smile 
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
mr.DUDA
Дата 4.11.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

Репутация: 110
Всего: 232



Регэкспом тоже можно, и наверно - нужно  smile, потому что проще.

Схема такая: ищем первую строку типа Project(...) = "...". Можно, конечно, составить и паттерн посложнее, но глядя на примеры .sln-файлов лично я не нашёл граблей.

Что до примера, вот он:
Код
using System;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string slnString = new StreamReader(@"D:\Projects\ConsoleApplication3\ConsoleApplication3.sln").ReadToEnd();

        // парсим
        Regex r = new Regex(@"Project\(.*?\)(\s+)=(\s+)""(?<projname>.*?)""");
        Match m = r.Match(slnString);
        if (m.Success)
        {
            Group g_projname = m.Groups["projname"];
            if (g_projname.Success)
            {
                // распарсили имя проекта
                string projectNameFromSln = g_projname.Value;
            }
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
_Dream
Дата 8.11.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



О спасибо большое.
я правда имел  в виду пример 
Цитата

написать свой add-in для студии или макрос. 
  smile 
ну если так проще то проще.. 
теперь следующий вопрос. я составил регулярное выражение сам но проблема в том что не могу запомнить имя проекта(чтоб выводить только его) прочитал что надо использовать круглые скобки но не получается. Ваш пример работает но только в случае если проект 1 в солюшене а их может быть много
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
archimed7592
Дата 8.11.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



_Dream, 
Код
using System;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string slnString = new StreamReader(@"t:\test.sln").ReadToEnd();

            // парсим
            Regex r = new Regex(@"Project\(.*?\)(\s+)=(\s+)""(?<projname>.*?)""");
            MatchCollection mc = r.Matches(slnString);
            foreach (Match m in mc)
            {
                if (m.Success)
                {
                    Group g_projname = m.Groups["projname"];
                    if (g_projname.Success)
                    {
                        // распарсили имя проекта
                        string projectNameFromSln = g_projname.Value;
                        Console.WriteLine(projectNameFromSln);
                    }
                }
            }
        }
    }
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
_Dream
Дата 8.11.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



блин  smile 
спасибо большое все проще чем я думал.
пошел учить матчасть..
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
mr.DUDA
Дата 8.11.2006, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

Репутация: 110
Всего: 232



Цитата(_Dream @  8.11.2006,  06:45 Найти цитируемый пост)
я составил регулярное выражение сам но проблема в том что не могу запомнить имя проекта(чтоб выводить только его) прочитал что надо использовать круглые скобки но не получается.

Именованные круглые скобки задаются так: (?<имя_группы>регэксп_для_захвата), такие скобки можно получать из GroupsCollection по имени.

Цитата(_Dream @  8.11.2006,  06:45 Найти цитируемый пост)
Ваш пример работает но только в случае если проект 1 в солюшене а их может быть много

См. пример archimed7592


--------------------
user posted image
PM MAIL WWW   Вверх
_Dream
Дата 13.11.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



всем привет. еще такой вопрос.. я думал что понял эти выражения как оказалось не совсем..

можно подробно что написано в этой строке?
"Project\(.*?\)(\s+)=(\s+)""(?<projname>.*?)"""
как я понимаю это так 
ищем строку в начале которй будет слово Project потом символ '('  потом 0 или 1 символ (кроме символа конца строки - интересно почему только 1??) потом символ ')' Далее от 1го до бесконечности непробелов потом знак '=' Далее от 1го до бесконечности непробелов. после него почему то вынесенный в "" то что мы запоминаем в группу(а запоминаем мы 0 или 1 символ?)

заранее спасибо
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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