singlepost

Ошибка при компиляции проекта в Visual Studio << На главную или назад  

С некоторого момента времени Visual Studio стал показывать ошибку.
Ссылка на картинку ошибки: //vkontakte.ru/photo589737_136054109.
Текст ошибки: "Visual Studio cannot start debugging because the debug target 'C:\….\Project\WindowsApplicatio6\bin\Debug\WindowsApplicatio6.exe' is missing. Please build the project and retry, or set the OutputPath and AssemblyName properties appropriately to point at the correct location for the target assembly."
Я не так давно начал работать в этой среде, поэтому не могу в точности раззобраться от чего появилась эта ошибка. Понятно, что Вижуал Студия не может запустить процесс отладки, т.к. не может найти откомпилированый файл .exe в соответствующем каталоге "\bin\Debug\". Когда компилирую проект отдельно (Build), Студия не выдаёт никаких ошибок, а наоборот уверяет меня, что всё прошло превосходно. Не смотря на это в каталоге "\bin\Debug\" экзешника всё ещё не наблюдается. Хотя в папке "\obj\Debug\" лежит файл "WindowsApplicatio6.exe". Тот ли это экзешник? Может достаточно просто сменить в настройках путь "\bin\Debug\" на "\obj\Debug\"?

96 ответов в теме “Ошибка при компиляции проекта в Visual Studio”

  1. 20
    Дамир Алиев ответил:

    Да не, это мож и важно тем кто такты считает, ассемблерщикам мож. А для Сишников достаточно собрать проект с другими опциями. И вуаля, полный юникод. Хотя тож есть свои заморочки. Ну прошли времена Win95, а в Win7 вообще что твориться, обычные проги на эмуляторе WinXP запускаются. А для родных все по своему.

  2. 19
    Александр Lert ответил:

    Да, радуюсь, круто же, целых 32 тыщи :)

    А про время конвертации – не знаю, может и ощутимо. Все таки маппинг тысяч символов юникода на ANSI и обратно, со всеми там разными code pages, навряд ли осуществляется супербыстро, и так далее, не говоря уже о выделении промежуточного буфера для строки, который наверняка берется из кучи, за время, далеко не всегда константное. Так что вполне возможно, что времени на среднюю строку наберется больше, чем каких-то жалких тысячу, на сколько я помню, тактов, требуемых для перехода между user и kernel. Правда действительно, навряд ли это может кого-то беспокоить. Но интересно бы замерить :)

  3. 18
    Cyber Max ответил:

    > раз пошёл такой оффтоп, то на сколько всё-таки фактически быстрей?
    На столько что в вашей программе это будет не существенно заметно. т.к время на конверацию несоизмеримо меньше чем переход через шлюз из user-mode в kernel-mode и обратно, где фактически происходит обработка ваших API вызовов. Обычно узкие места можно отловить профилировщиком. А если хочется уж очень заоптимизировать, то можно вызывать Zw*, Nt* аналоги WinAPI функцкий. Но есть ли в этом смысл когда уже .NET на дворе и мало кого интерисует производительность программы.

  4. 17
    Cyber Max ответил:

    > Я с некоторого времени только Unicode и использую.
    Вот вы через это прошли.. и теперь радуетесь полноценным длинным путям до 32000 символов… а некоторым хватает и 260 :)

    > Его выгодно использовать хотя бы потому, что ANSI-версии функций
    > только и делают, что конвертируют строки и передают их Unicode-
    > версиям
    Ну делают они так по той причине, что в kernel-mode все функции только Unicode… и там уже хочешь/не хочешь а приходится только с Unicode работать.

  5. 16
    Нгамдкхе Кверос ответил:

    раз пошёл такой оффтоп, то на сколько всё-таки фактически быстрей? а то слышать слышал, а дойти до нира по теме не дошёл, вроде не критично, а знать так для галочки интересно.

  6. 15
    Дамир Алиев ответил:

    Тута соглашусь, сколько раз под Olly видел такие фокусы, конвертим туды, конвертим сюды. Даже какой нить MessageBoxA перегоняется в MessageBoxW.
    А с NOD32 я пересел на Eset Smart Security. Быстро, четко и все корректно.

  7. 14
    Александр Lert ответил:

    Ну, я как-то тестировал антивирус NOD32, по-видимому, он работает с такими путями :) Кроме того, он безошибочно (совершенно не зависая и находя все спрятанные вирусы) прошел мои тесты типа запутанных мягких/жестких ссылок NTFS на файлы, каталоги, в том числе и циклические ссылки на дереве каталогов, потоки NTFS, и некоторое множество других хитровывернутых тестов, после чего я проникся большим почтением к его создателям :) Так что корректные программы существуют :)

  8. 13
    Александр Lert ответил:

    2 Cyber Max:
    Я с некоторого времени только Unicode и использую. Его выгодно использовать хотя бы потому, что ANSI-версии функций только и делают, что конвертируют строки и передают их Unicode-версиям, а выходные строки конвертируют обратно, то есть могут работать гораздо медленнее. Да и вообще из-за понятных преимуществ юникода.

  9. 12
    Cyber Max ответил:

    > К сожалению, используют их немногие, к примеру:..
    А вы часто используете Unicode версии апишный функций? Microsoft дала небольшую вольность и разрешила выбирать между ANSI и Unicode функциами, но тем самым уменьшила и рамки дозволеного…

  10. 11
    Дамир Алиев ответил:

    Оффтоп пошел, ну да ладно. А какая прога смогет такой путь корректно обработать ?

    Я наблюдал как то, что дискета сбойнула а получилось что в папке A:\NC\ находилась папка NC (ну это в старые времена было), при чем это была не другая папка, а сама же она. И винда вычисляя занятое место прошлась по этому пути вглубь рекурсивно пока хватило длины пути. Дискета получилась ооооооочень объемной :)

  11. 10
    Александр Lert ответил:

    Собственно говоря, я к этому и сказал :) Это распространенное заблуждение, что путь ограничен 260 символами, практически все файловые функции WinAPI поддерживают очень длинные имена, если уметь их использовать:
    //msdn.microsoft.com/en-us/library/aa365247.aspx
    (см. в разделе Maximum Path Length)
    К сожалению, используют их немногие, к примеру, Проводник Windows (проверял вплоть до висты включительно) или Far Manager до сих пор не могут открывать каталоги и файлы с путями больше 260 символов.

  12. 9
    Александр Lert ответил:

    2 Алиев ˜”*°•ShooshpanchiK•°*”˜ Дамир:
    Немного оффтоп, но:
    малость спутаны понятия длины имени файла и длины пути к файлу.
    На самом деле в WinAPI максимальная длина пути составляет порядка 32000 символов. Имя же файла действительно ограничено 255 символами и в FAT, и в NTFS.

  13. 8
    Дамир Алиев ответил:

    Что такое максимальная длина имени файла?
    Windows обычно ограничивает имена файлов 260 символами. Но фактически имя файла должно быть короче, ____так как в это число включен полный путь____ (например, C:\Program Files\filename.txt). Поэтому иногда можно столкнуться с ошибкой при копировании файла с очень длинным именем в папку, имеющую более длинный путь, чем текущая папка.
    Взято с
    //windowshelp.microsoft.com/Windows/ru-RU/Help/...

    (Выделено мною)

  14. 7
    Дамир Алиев ответил:

    Ну а бинарник то хоть заново создался ?

  15. 6
    Никита Красноярцев ответил:

    Да. Всё работает. Больше никуда не лезу))

  16. 5
    Никита Красноярцев ответил:

    Кстати, ребилд и удаление бинариков не решили проблему.

  17. 4
    Дамир Алиев ответил:

    Как известно, длина имени файла в Windows ограничена 256 символами. В программировании используется константа MAX_PATH, которая равна 260. Судя по названию, она означает максимальную длину пути в Windows, которая складывается из максимальной длины имени каталога 255 символов + слэш на конце + завершающий нулевой символ, и из символов, означающих букву диска в количестве трёх штук (например, "C:\"). Всё это вместе даёт длину пути 260. На самом деле это ограничение в 260 символов есть только в Windows API. В самой файловой системе (FAT32 или NTFS) максимальная длина имени файла ограничена 255 символами.

    Хотя да, в пути
    C:\Documents and settings\admin\Мои документы\Visual studio 2005\Projects\WindowsApplicatio6\WindowsApplicatio6\bin\Debug\WindowsApplicatio6.exe

    я насчитал 147 символов.

  18. 3
    Никита Красноярцев ответил:

    >>Удали тот файлик и снова скомпиль, тогда и увидишь он это или нет. Делов то.
    Программа на выполнение вообще не запускается. Пробовал запустить файл в "\obj\Debug\", запускается и по обычному работает вроде…
    Посмотрел в старых проектах фалы в двух каталогах "\bin\Debug\" и \obj\Debug\", затем сравнил их и оказалось, что они полностью одинаковы, файлы всмысли… Поменял OutputPath в настройках проекта и вроде заработало всё…

  19. 2
    Дамир Алиев ответил:

    Крякер Красноярцев
    Удали тот файлик и снова скомпиль, тогда и увидишь он это или нет. Делов то. А вообще путь длинноват, тама вроде есть какое-то ограничение на длину пути.

  20. 1
    Евгений Гаврин ответил:

    Нормальный путь. ребилд или удаление бинарников решают подобные проблемы.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.