Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2016, 21:14   #21
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

ТС, может озвучить зачем вам это? Просто на вскидку могу только несколько кейсов сего действия придумать, но для них есть болле удобные и правильные решения... а просто так перекомпилировать кучу солюшенов редко приходится.
p51x вне форума Ответить с цитированием
Старый 11.02.2016, 21:43   #22
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Я никогда не рассказываю на вопрос "зачем" , у меня нет такого вопроса, есть вопрос -как ? Да есть такой. Где скачать или откуда получить файл devenv.exe потому-что у меня его нет?
komra2 вне форума Ответить с цитированием
Старый 11.02.2016, 21:55   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Где скачать или откуда получить файл devenv.exe потому-что у меня его нет?
если у вас его нет, значит у вас нет студии...ибо это ее IDE.

просто вас об xyz(тыркни меня!) предупреждают.
потому что понимание желания поможет опытным людям подсказать оптимальное решение.

так же прочтите мою подпись.
Цитата:
Я никогда не рассказываю на вопрос "зачем" , у меня нет такого вопроса
Цитата:
Сообщение от Алиса в стране чудес
— Скажите, пожалуйста, куда мне отсюда идти?
— А куда ты хочешь попасть? — ответил Кот.
— Мне все равно... — сказала Алиса.
— Тогда все равно куда и идти, — заметил Кот.
— Только бы попасть куда-нибудь, — пояснила Алиса.
— Куда-нибудь ты обязательно попадешь, — сказал Кот. — Нужно только достаточно долго идти.
Поверьте мне, если вы начнете с зачем, вам ответ дадут на первой же странице, даже практически готовый.
Проведу аналогию, если вы попросите дом, вам дадут дом, такой какой попросили.
Но если вы просите кучу кирпичей, вам их и дадут, но собирать вам придется самим.

судя по всему задача сделать масс ребилд, я бы это в PowerShell наверно сделал, там рекурсивный поиск легко сделать( по крайней мере я знаю как).
в общем читаем посты 2 и 14 до понимания.
IDE вам не даст автоматизации, это не ее задача.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 11.02.2016 в 22:07.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.02.2016, 22:25   #24
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Раз уж на то пошло, ответ на любой мой вопрос а именно зачем? Как быстро железка справляется с задачей;2) не делать для себя лишнюю работу, зачем мне это делать если у меня это займет день а железка сделать за 5-15 секунд
komra2 вне форума Ответить с цитированием
Старый 11.02.2016, 23:04   #25
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это не ответ, и так понятно, что ЭВМ обычно используются для упрощения работы человека.
Только задачи разные бывают и решаются по-разному.

А xyz прочитать все-таки стоит.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.02.2016, 23:42   #26
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Интересно было почитать...да...то есть чтобы задать вопрос надо алгоритм выложить как куда )зачем может не надо, железке та все равно зачем(алгоритм написали, она и выполняет))?
komra2 вне форума Ответить с цитированием
Старый 12.02.2016, 00:15   #27
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что представьте стоматолога лечащего зубы через задницу.

Код:
using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            string root = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            if (args.Length > 0 && Directory.Exists(args[0]))
            {
                root = args[0];
            }
            using (var log = new StreamWriter(Path.Combine(root, "log.log"), false))
            {
                foreach (var file in Directory.GetFiles(root, "*.sln"))
                {
                    log.WriteLine("Starting build: {0}", file.Substring(root.Length));
                    log.WriteLine("Build finished with result: {0} (0 = success)", Build(file, root));
                }
            }
        }

        static string MSBuild = GetMSBuildPath();

        private static string GetMSBuildPath()
        {
            using (var reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions", false))
            {
                var max=reg.GetSubKeyNames().Select(k => new Tuple<string,decimal>(k,decimal.Parse(k, CultureInfo.InvariantCulture))).OrderByDescending(k => k.Item2).First().Item1;
                using (var sub = reg.OpenSubKey(max))
                {
                    return Path.Combine(sub.GetValue("MSBuildToolsPath").ToString(),"msbuild.exe");
                }
            }
        }

        static int Build(string path, string root)
        {
            var psi = new ProcessStartInfo(MSBuild, string.Format("\"{0}\"", path));
            psi.RedirectStandardOutput = true;
            psi.WorkingDirectory = Path.GetDirectoryName(path);
            psi.UseShellExecute = false;
            using (var proc = Process.Start((psi)))
            using (var sr = new StreamWriter(Path.Combine(root, Path.GetFileName(path) + ".log"), false))
            {
                sr.WriteLine(proc.StandardOutput.ReadToEnd());
                proc.WaitForExit();
                return proc.ExitCode;
            }
        }
    }
}
вообще вот, накатал со скуки
сбилдить, и перенести в вашу папку с солюшенами, далее рядом с собой и в подпапках найдет все солюшены и построит их.
путь можно передать в командной строке первым аргументом.

Цитата:
зачем может не надо, железке та все равно зачем(алгоритм написали, она и выполняет))?
потому что
Цитата:
Программа делает то что написал программист, а не то что он хотел.
PS: всем, кроме ТС: кстати, нельзя дотнетовскому MSBuild передавать проекты от 2015 студии(вроде как от 2013 тоже), так как там MSBuild старее чем со студией, и он не может построить.
PPS: ТС, знаете, я это написал минут за 20-30. Потому что я вижу цель, и понимаю шаги к ней.
я делаю поэтапно собственно по коду это видно.
PPPS: насчет вопросов как и зачем, я не просто так Алису процитировал. знание цели позволит получить ответ на вопрос как, причем эффективный ответ.


----------------------------------------------

Ах да, билдит только конфигурацию по умолчанию.(обычно Debug)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 12.02.2016 в 00:43.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.02.2016, 01:11   #28
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

то есть код перекомпилирует или делает Rebuild всем .sln(замечательно) вот ток ошибку выдает
An unhandled exception of type 'System.TypeInitializationException ' occurred in mscorlib.dll

Additional information: Инициализатор типа "ConsoleApplication3.Program" выдал исключение.
komra2 вне форума Ответить с цитированием
Старый 12.02.2016, 01:12   #29
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

только не пойму куда мне написать путь в папке в которой находятся солушаны
komra2 вне форума Ответить с цитированием
Старый 12.02.2016, 01:20   #30
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            MSBuild=GetMSBuildPath(); \\ для MSVCS до 2013 убрать.
            string root = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            if (args.Length > 0 && Directory.Exists(args[0]))
            {
                root = args[0];
            }
            using (var log = new StreamWriter(Path.Combine(root, "log.log"), false))
            {
                foreach (var file in Directory.GetFiles(root, "*.sln"))
                {
                    log.WriteLine("Starting build: {0}", file.Substring(root.Length));
                    log.WriteLine("Build finished with result: {0} (0 = success)", Build(file, root));
                }
            }
        }

        static string MSBuild = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild.exe";

        private static string GetMSBuildPath()
        {
            using (var reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions", false))
            {
                var max=reg.GetSubKeyNames().Select(k => new Tuple<string,decimal>(k,decimal.Parse(k, CultureInfo.InvariantCulture))).OrderByDescending(k => k.Item2).First().Item1;
                using (var sub = reg.OpenSubKey(max))
                {
                    return Path.Combine(sub.GetValue("MSBuildToolsPath").ToString(),"msbuild.exe");
                }
            }
        }

        static int Build(string path, string root)
        {
            var psi = new ProcessStartInfo(MSBuild, string.Format("\"{0}\"", path));
            psi.RedirectStandardOutput = true;
            psi.WorkingDirectory = Path.GetDirectoryName(path);
            psi.UseShellExecute = false;
            using (var proc = Process.Start((psi)))
            using (var sr = new StreamWriter(Path.Combine(root, Path.GetFileName(path) + ".log"), false))
            {
                sr.WriteLine(proc.StandardOutput.ReadToEnd());
                proc.WaitForExit();
                return proc.ExitCode;
            }
        }
    }
}
хоть видно причину будет.
у вас какая студия?
если до 2013, то удалите выделенную строку.
Цитата:
только не пойму куда мне написать путь в папке в которой находятся солушаны
это утилита, или положить ее в папку, или аргументом передать( не забывая про кавычки)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многофайловые проекты _PROGRAMM_ Visual C++ 9 09.12.2012 13:57
Многофайловые проекты. inc Общие вопросы C/C++ 1 25.04.2012 16:57
Перекомпилировать файл labview в c++ ivanfadeeaa Помощь студентам 0 03.12.2011 22:15
разработать проекты.... Virus Помощь студентам 2 20.06.2007 17:53