Технический форум
Вернуться   Технический форум > Дневники > Léon


Оценить эту запись

Visual Studio 2010. Проблема отладки проекта

Запись от Léon размещена 05.12.2012 в 04:10

При построении выдает ошибку:
Нажмите на изображение для увеличения
Название: Ошибка.JPG
Просмотров: 787
Размер:	19.7 Кб
ID:	1958
Цитата:
"Не удается начать отладку, так как отсутствует цель отладки C:\Documents and Settings\...\Visual Studio 2010\Projects\...\bin\debug\Proga.exe>.Выполните построение проекта и попробуйте еще раз, или установите свойства OutputPath и AssemblyName так, чтобы они указывали на правильное расположение целевой сборки"
Решение проблемы.
Для этого вручную нужно скомпилировать файлы кода. Компилятор csc.exe.
Откройте программу Notepad (Блокнот), выбрав в меню Start (Пуск) пункт All Programs1 --- Accessories --- Notepad (Все программы --- Стандартные --- Блокнот), и введите следующее типичное определение класса на С#:
Код:
using System;

class TestApplication
{
   static void Main() 
   {
     Console.WriteLine("Привет!");
     Console.ReadLine();
   }
}
После окончания ввода сохраните файл под именем TestApplication.cs.

Указание целевых входных и выходных параметров
Первым делом важно разобраться с тем, как указывать имя и тип создаваемой сборки (т.е., например, консольное приложение по имени MyShell.exe, библиотека кода по имени MathLib.dll или приложение Windows Presentation Foundation по имени Halo8 .ехе). Каждый из возможных вариантов имеет соответствующий флаг, который нужно передать компилятору csc.ехе в виде параметра командной строки.
Чтобы скомпилировать TestApplication.cs в консольное приложение TestApplication.exe, перейдите в каталог (для этого выберите в меню Пуск---Программы---
Нажмите на изображение для увеличения
Название: 10+.png
Просмотров: 1087
Размер:	29.4 Кб
ID:	1972), в котором был сохранен файл исходного кода (с помощью флага cd) и введите следующую команду:
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 1359
Размер:	13.7 Кб
ID:	1959
Обратите внимание, что здесь C:\myProject - это путь к папке, в которой хранится файл TestApplication.cs. Так же обратите внимание, что здесь флаг /out не был указан явным образом, поэтому исполняемым файл получит имя TestApplication.ехе из-за того, что именем входного файла является TestApplication. Кроме того, для почти всех принимаемых компилятором С# флагов поддерживаются сокращенные версии написания, наподобие /t вместо /target (полный список которых можно увидеть, введя в командной строке команду csc -?).
Теперь можно попробовать запустить приложение TestApplication.ехе из командной строки, введя имя его исполняемого файла:
Нажмите на изображение для увеличения
Название: 2.jpg
Просмотров: 835
Размер:	18.4 Кб
ID:	1960

Добавление ссылок на внешние сборки
Посмотрим, как скомпилировать приложение, в котором используются типы, определенные в отдельной сборке .NET.
Модифицируем приложение TestApplication так, чтобы в нем открывалось окно сообщения Windows Forms. Для этого откройте файл TestApplication.cs и измените его следующим образом:
Код:
using System;
using System.Windows.Forms;

class TestApplication
{
   static void Main() 
   {
     Console.WriteLine("Привет!");
     MessageBox.Show("Привет!!!");
   }
}
Далее в командной строке нужно проинформировать компилятор csc.exe о том, в какой сборке содержатся используемые пространства имен. Поскольку применялся класс MessageBox из пространства имен System.Windows.Forms, значит, нужно указать компилятору на сборку System.Windows.Forms.dll, что делается с помощью флага /reference (или его сокращенной версии /r):
Нажмите на изображение для увеличения
Название: 3.jpg
Просмотров: 429
Размер:	31.3 Кб
ID:	1961
Если теперь снова попробовать запустить приложение, то помимо консольного вывода в нем должно появиться еще и окно с сообщением:
Название: 4.jpg
Просмотров: 5128

Размер: 2.8 Кб
Кстати, как поступить, когда необходимо указать csc.exe несколько внешних сборок? Для этого нужно просто перечислить все сборки через точку с запятой. В рассматриваемом примере ссылаться на несколько сборок не требуется, но ниже приведена команда, которая иллюстрирует перечисление множества сборок:
csc /r:System.Windows.Forms.dll;System.Drawing.dll *.cs

Компиляция нескольких файлов исходного кода
В текущем примере приложение TestApp.exe создавалось с использованием единственного файла исходного кода * . cs. Хотя определять все типы .NET в одном файле *.cs вполне допустимо, в большинстве случаев проекты формируются из нескольких файлов *.cs для придания кодовой базе большей гибкости. Чтобы стало понятнее, давайте создадим новый класс и сохраним его в отдельном файле по имени HelloMessage.cs:
Код:
// Класс HelloMessage
using System;
using System.Windows.Forms;

class HelloMessage
{
   public void Speak()
   (
      MessageBox.Show("Привет!!") ;
   )
}
Изменим исходный класс TestApplication так, чтобы в нем использовался класс этого нового типа:
Код:
using System;

class TestApplication
{
   static void Main() 
   {
     Console.WriteLine("Привет!");
     
     HelloMessage v = new HelloMessage();
     v.Speak();
   }
}
Чтобы скомпилировать файлы исходного кода на С# , необходимо их явно перечислить как входные файлы:
Нажмите на изображение для увеличения
Название: 5.jpg
Просмотров: 339
Размер:	14.1 Кб
ID:	1965
В качестве альтернативного варианта компилятор С# позволяет использовать групповой символ (*) для включения в текущую сборку всех файлов *.cs, которые содержатся в каталоге проекта:
Нажмите на изображение для увеличения
Название: 6.jpg
Просмотров: 345
Размер:	13.0 Кб
ID:	1964
Вывод, получаемый после запуска этой программы, идентичен предыдущей программе. Единственное отличие между этими двумя приложениями связано с разнесением логики по нескольким файлам.

Работа с ответными файлами в C#

Для создания сложного приложения С# из командной строки потребовалось бы вводить утомительное количество входных параметров для уведомления компилятора о том, как он должен обрабатывать исходный код. Для облегчения этой задачи в компиляторе С# поддерживается использование так называемых ответных файлов (response files).
В ответных файлах С# размещаются все инструкции, которые должны использоваться в процессе компиляции текущей сборки. По соглашению эти файлы имеют расширение *.rsp (сокращение от response — ответ). Чтобы посмотреть на них в действии, создадим ответный файл по имени TestApplication.rsp, содержащей следующие аргументы (комментарии в данном случае обозначаются символом #):
Код:
# Это ответный файл для примера
# TestApplication.exe 

/r:System.Windows.Forms.dll

# Параметры вывода и подлежащие компиляции файлы

/target:exe /out:TestApplication.ехе *.cs
Теперь при условии сохранения данного файла в том же каталоге, где находятся подлежащие компиляции файлы исходного кода на С#, все приложение можно будет создать следующим образом (обратите внимание на применение символа @):
Нажмите на изображение для увеличения
Название: 7.jpg
Просмотров: 312
Размер:	12.6 Кб
ID:	1966
В случае необходимости допускается также указывать и несколько ответных *.rsp файлов в качестве входных параметров (например, csc @FirstFile.rsp @SecondFile.rsp @ThirdFile.rsp). При таком подходе, однако, следует иметь в виду, что компилятор обрабатывает параметры команд по мере их поступления. Следовательно, аргументы командной строки, содержащиеся в поступающем позже файле *.rsp, могут переопределять параметры из предыдущего ответного файла.
Последним моментом, связанным с ответными файлами, о котором необходимо упомянуть, является то, что с компилятором С# ассоциирован ответный файл csc.rsp, который используется по умолчанию и размещен в том же самом каталоге, что и файл csc.ехе (обычно это С:\Windows\Microsoft. NET\Framework\<Bepсия>, где на месте элемента <Bepсия> идет номер конкретной версии платформы). Открыв файл csc.rsp в программе Notepad (Блокнот), можно увидеть, что в нем с помощью флага /r: указано множество сборок .NET, в том числе различные библиотеки для разработки веб-приложений, программирования с использованием технологии LINQ и обеспечения доступа к данным и прочие ключевые библиотеки (помимо, конечно же, самой главной библиотеки mscorlib. dll):
Нажмите на изображение для увеличения
Название: 8.jpg
Просмотров: 539
Размер:	55.0 Кб
ID:	1967
При создании программ на С# с применением csc.ехе ссылка на этот ответный файл добавляется автоматически, даже когда указан специальный файл *.rsp. Из-за наличия такого ответного файла по умолчанию, рассматриваемое приложение TestApplication.ехе можно скомпилировать и c помощью следующей команды (поскольку в csc.rsp уже содержится ссылка на System.Windows.Forms.dll):
Нажмите на изображение для увеличения
Название: 9.jpg
Просмотров: 271
Размер:	12.9 Кб
ID:	1968
Стоит отметить, что в случае добавления с помощью опции /r ссылок на сборки, которые на самом деле не используются, компилятор их проигнорирует. Поэтому беспокоиться по поводу "разбухания кода" не нужно.
По материалам professorweb.ru
Размещено в Без категории
Просмотров 9235 Комментарии 5 Редактировать метки
Всего комментариев 5

Комментарии

  1. Старый комментарий
    Проще утопиться и не мучиться...
    permalink
    Запись от Vladimir_S размещена 05.12.2012 в 11:54 Vladimir_S вне форума
  2. Старый комментарий
    Аватар для KUS
    Энджи, мне на такое даже смотреть страшно.....
    permalink
    Запись от KUS размещена 05.12.2012 в 15:53 KUS вне форума
  3. Старый комментарий
    Аватар для Léon
    Цитата:
    Сообщение от Vladimir_S Просмотреть комментарий
    Проще утопиться и не мучиться...
    Нее, не проще. Я сама с такой ошибкой столкнулась. В интернете программисты так и не дают решение этой проблемы. Обычно советуют переустановить среду, если не поможет, то и операционную систему. Редко когда это помогает. Решение проблемы нашла и решила все-таки поделиться, т.к. в интернете часто можно увидеть сообщения о такой ошибке.
    permalink
    Запись от Léon размещена 05.12.2012 в 17:20 Léon вне форума
  4. Старый комментарий
    Аватар для AlexZir
    А не проще напрямую обращаться к одноименному компилятору в папке .NET Framework, явно указывая имя файла программы?
    permalink
    Запись от AlexZir размещена 05.12.2012 в 17:25 AlexZir вне форума
  5. Старый комментарий
    Аватар для Léon
    Цитата:
    Сообщение от AlexZir Просмотреть комментарий
    А не проще напрямую обращаться к одноименному компилятору в папке .NET Framework, явно указывая имя файла программы?
    Возможно, проще. Но мне не удалось избавиться от ошибки.
    permalink
    Запись от Léon размещена 05.12.2012 в 17:50 Léon вне форума
 


Часовой пояс GMT +4, время: 03:21.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.