Это файл маркера созданный средством предварительной компиляции его нельзя удалять
[Язык C] Подробное объяснение (идентификатор предварительной обработки / макрос и функция / процесс компиляции)
Символ предварительной обработки
общий Пять предопределенных символов Есть:
①__LINE__: номер строки текущей исходной программы
②__FILE__: файл компилируемой программы
③__DATE__: строка скомпилированной даты, например "Mmm dd yyyy"
④__TIME__: Скомпилированная временная строка в форме "чч: мм: сс"
ST__STDC__: Если содержимое __STDC__ является десятичной константой 1, это означает, что реализация компилятора соответствует стандарту C. Их значениями являются либо строковые, либо десятичные числовые константы.
__FILE__ и __LINE__ Полезно для подтверждения источника вывода отладки.
_DATE__ и __TIME__ Он часто используется для добавления информации о версии в скомпилированную программу.
__STDC__ Он используется для условной компиляции в программах, которые должны быть скомпилированы как в средах ANSI, так и не в среде ANSI.
Предыдущий код для демонстрации:
Приведенный выше пример напечатает:
a/b=2
Приведенный выше пример очевиден, ответ - привет, бит вместо привет, мир.
Макросы и функции
Макросы очень часто используются для выполнения простых вычислений, таких как нахождение большего (или меньшего) из двух выражений;
Почему бы не использовать функции для выполнения этой задачи?
Есть две причины. Во-первых, код, используемый для вызова и возврата из функции, вероятно, будет больше, чем код, который фактически выполняет эти небольшие вычисления, поэтому использование макросов лучше, чем использование функций с точки зрения размера и скорости программы.
Однако, что более важно, параметры функции должны быть объявлены как определенный тип, поэтому его можно использовать только в выражениях соответствующего типа. И наоборот, приведенный выше макрос можно использовать для целых, длинных, одинарных и двойных чисел, чтобы думать о любом другом типе, который можно сравнить с оператором>. Другими словами, макросы не зависят от типа.
По сравнению с использованием функций, недостатком использования макросов является то, что каждый раз, когда используется макрос, в программу будет вставлена копия кода определения макроса. Если макрос не очень короткий, макрос может значительно увеличить длину кода.
Есть некоторые задачи, которые не могут быть достигнуты с помощью функций вообще. Соблюдайте макрос ниже внимательно. Вторым параметром этого макроса является тип, который нельзя передать как параметр функции.
Теперь вы подробнее рассмотрите точный рабочий процесс этого макроса.Первый оператор в следующем примере преобразуется во второй оператор.
Также обратите внимание, что определение макроса не заканчивается точкой с запятой. Точка с запятой появляется в утверждении, которое вызывает этот макрос.
Процесс компиляции и компоновки
Процесс компиляции и компоновки на языке C состоит в том, чтобы преобразовать написанную нами программу C (исходный код) в исполняемую программу, которая может быть запущена на оборудовании, и ее необходимо скомпилировать для компоновки. Компиляция - это процесс перевода исходного текста в целевой файл в формате машинного языка. Связывание - это процесс организации целевого файла, кода запуска операционной системы и файлов библиотеки, используемых для формирования конечной исполняемой программы.
Ниже поясняется простая программа (скомпилированная в среде Linux):
- Команды сгенерированного исполняемого файла следующие:
Шаг 1: Предварительная компиляция .c file->. I file
Конечно, что вы делали на этапе предварительной обработки?
Шаг 2: Скомпилируйте файл .i file->. S
Переведите исходные программы, написанные на языках программирования высокого уровня, в эквивалентные целевые программы или программы перевода, написанные на языке ассемблера компьютера или машинном языке.
Шаг 3: Соберите целевой двоичный файл .s->. O
Примечание. Файл .o здесь не является исполняемым файлом, целевой файл не является связанной библиотекой, поэтому он не может быть выполнен, и конкретное содержимое ELF также отличается.
Шаг 4: Ссылка .o-> исполняемые файлы
Основная задача компоновщика - соединить соответствующие объектные файлы друг с другом, то есть соединить символ, на который есть ссылка в одном файле, с определением символа в другом файле, чтобы все эти объектные файлы стали операционной системой. В единое целое исполнения. Согласно другому методу связи одной и той же библиотечной функции, указанной разработчиком,
- Существует два типа обработки ссылок:
Статическая ссылка
В этом методе связывания код функции будет скопирован из библиотеки статических ссылок, где она находится, в конечную исполняемую программу. Таким образом, при выполнении программы эти коды будут загружены в виртуальное адресное пространство процесса. Библиотека статических ссылок на самом деле представляет собой набор целевых файлов, каждый из которых содержит код одной или группы связанных функций в библиотеке.
Динамическая ссылка
В процессе компиляции и компоновки есть четыре основные инструкции:
препроцессор: Преобразование файла .c в файл .i. Используемая команда gcc: gcc -E, что соответствует команде предварительной обработки cpp;
составитель: Преобразуйте файл .c / .h в файл .s, используйте команду gcc: gcc –S, что соответствует команде компиляции cc –S;
ассемблер: Преобразовать файл .s в файл .o, используется команда gcc: gcc -c, соответствующая команде сборки as;
Linker: Преобразуйте файл .o в исполняемую программу, используется команда gcc: gcc, соответствующая команде link: ld;
Это файл маркера, сгенерированный инструментом предварительной компиляции, и он не должен быть удален!
Каталог файловой системы на сервере выглядит следующим образом:
Не уверен, что мне нужно добавить/удалить, чтобы он отображал мою страницу без этого текста инструмента предварительной компиляции .
Сервер IIS-это версия 6.1
3 ответа
Большая часть веб-сайта предварительно скомпилирована и объединена, так как она почти никогда не изменится. Предварительно скомпилированные биты могут быть заменены в случае обновления оригинала. Я хочу продолжить разработку новых страниц, но когда я перехожу на новую страницу, Я получаю следующую.
Одной из причин этой проблемы является отсутствие файла PrecompiledApp.config в корне вашего сайта (этот файл генерируется мастером публикации).
Надеюсь, это поможет другим.
Проблема:
Когда вы загружаете веб-приложение, иногда самые важные файлы в папке bin (например, файлы .dll) загружаются неправильно.
Решение:
Повторно загрузите папку bin. Не забудьте переписать.
Убедитесь, что сайт настроен как приложение на IIS
Я только недавно перешел с общего хостинга на vps на GoDaddy. У меня был веб-сервис, который отлично работал на общем хостинге. Я пытаюсь заставить его работать под моим vps. Я постоянно получаю 500-внутреннюю ошибку при переходе по ссылке. Я настроил его как приложение в IIS, и я сделал свой.
У меня есть несколько шаблонов .cshtml, которые я использую для рендеринга в PDFs. Когда я развертываю их в производство, они предварительно компилируются и содержат текст это файл маркера, сгенерированный инструментом предварительной компиляции, и его нельзя удалять! Есть ли способ сказать.
Похожие вопросы:
Приветствия, Я разворачиваю свой веб-сайт на webserver с mono Я выбираю опцию опубликовать но когда я пытаюсь получить доступ к любой странице aspx это появляется This is a marker file generated by.
Большая часть веб-сайта предварительно скомпилирована и объединена, так как она почти никогда не изменится. Предварительно скомпилированные биты могут быть заменены в случае обновления оригинала. Я.
Я только недавно перешел с общего хостинга на vps на GoDaddy. У меня был веб-сервис, который отлично работал на общем хостинге. Я пытаюсь заставить его работать под моим vps. Я постоянно получаю.
У меня есть несколько шаблонов .cshtml, которые я использую для рендеринга в PDFs. Когда я развертываю их в производство, они предварительно компилируются и содержат текст это файл маркера.
На моем веб-сервере, если я посещаю страницу, которая не существует, он генерирует правильный 404, UNLESS, что страница заканчивается на .aspx. Если недопустимый url заканчивается на .aspx, то IIS.
Файл '/SuperOfficeWebService/Contact.asmx' не был предварительно скомпилирован и не может быть запрошен.
Те же стандартные веб-сервисы (установленные через MSI-файл) работают на других компьютерах.
Файлы .asmx содержат только текст «Это файл маркера, созданный инструментом предварительной компиляции, и его не следует удалять!», как и ожидалось.
Проблема была решена путем установки «Microsoft Web Service Enhancements v3.0».
Если кто-то еще ищет решение, у меня возникла та же проблема. Моя проблема заключалась в том, что я использовал «aspnet_compiler» из неправильной папки фреймворка. Мой проект был создан в VS'05 и .net 2.0. Я пытался прекомпилировать из "c: \ windows \ Microsoft .NET \ Framework \ v4.xxxx", когда мне нужно было прекомпилировать из "c: . \ v2.xxxx".
Надеюсь, это кому-нибудь поможет.
"сборки" отсутствовали две строки:
Также отсутствовали эти строки из раздела "system.web":
Я занимаюсь развертыванием XCOPY и использую web.config для контроля различий между разработкой и реализацией (строка подключения и т. д.). После публикации в VS (в папку на моем устройстве dev) я удаляю web.config (так как он имеет мои настройки dev) и просто продолжаю использовать тот же web.config в прямом эфире. Поскольку в живом web.config были эти пропущенные строки, я компилировал против web.config, который отличался не только несколькими значениями ключей приложения.
Восстановление этих строк в моей среде разработки и повторная публикация устранили проблему. Оу, они только что снова исчезли из моей VS 2010, мне лучше записать вопрос!
У меня была та же проблема, и я исправил ее, выполнив следующую команду, чтобы заново связать правильный компилятор с IIS.
И выполните: aspnet_regiis -i
Надеюсь, это поможет.
Если вы столкнулись с этой проблемой при запуске сценария MSBuild, есть вероятность, что ваш проект является проектом 2.0 или 3.5, а MSBuild использует компилятор 4.0. Добавьте TargetFrameworkMoniker="3.5" в свои директивы AspNetCompiler .
файл ' /SuperOfficeWebService / контакт.asmx ' не был предварительно скомпилирован и не может быть запрошен.
те же стандартные веб-сервисы (установленные через an .msi) работает на других машинах.
The .asmx-файлы содержат только текст "это файл маркера, сгенерированный инструментом предварительной компиляции, и не должен быть удален!", как и ожидалось.
в папке bin subfolder у меня есть.скомпилированные файлы, которые соответствуют .asmx файлов.
в случае, если кто-то еще ищет решение, у меня была та же проблема. Моя проблема заключалась в том, что я использовал "aspnet_compiler" из неправильной папки framework. Мой проект был создан в VS ' 05 и .net 2.0. Я пытался скомпилировать с "c:\windows\Microsoft .Чистая\рамки\В4.ХХХХ", когда мне нужно скомпилировать с "C. \В2.xxxx".
надеюсь, что это кому-то поможет.
проблема была решена путем установки " Microsoft Web Service Enhancements v3.0".
в теге" assemblies " отсутствовали две строки:
также отсутствовали эти строки из " system.сеть" раздел:
Я делаю развертывание XCOPY и использую web.config для управления различиями между разработкой и live (строка подключения и т. д.). После публикации в VS (в папку на моем dev box) я удаляю web.config (поскольку у него есть мои настройки dev) и просто продолжайте использовать тот же веб-сайт.конфигурации в прямых. Потому что живая паутина.у config были эти недостающие строки, я компилировал против интернета.config, который отличался более чем несколькими ключами приложения ценности.
восстановление этих строк в моей среде разработки и переиздания Исправлена проблема. Вау, они снова исчезли из моего VS 2010, мне лучше записать вопрос!
у меня была та же проблема и починил его, выполнив следующую команду, чтобы повторно связать правильный компилятор с IIS.
и aspnet_regiis -i
надеюсь, что это помогает.
Если вы получаете эту проблему при запуске сценария MSBuild, скорее всего, ваш проект является проектом 2.0 или 3.5, а MSBuild использует компилятор 4.0. Добавить TargetFrameworkMoniker="3.5" на AspNetCompiler директивы.
Читайте также: