Nano Hash - криптовалюты, майнинг, программирование

Почему компилятор С# срабатывает во второй раз?

У меня есть приложение WinForm. Я компилирую его, дважды щелкаю по нему. Как и ожидалось, запускается csc.exe, затем исчезает, и приложение запускается.

Я предполагаю, что на данный момент приложение было сброшено, поэтому у csc.exe нет причин снова запускать его.

Затем я выхожу из приложения и запускаю его снова. Я вижу, что csc.exe снова срабатывает.

Что происходит?


  • @Тимви. Двойным щелчком я имею в виду, что запускаю свой app.exe. Это не внутри IDE. 19.08.2010

Ответы:


1

Вы вообще используете сериализацию? Я считаю, что в некоторых случаях будет построена временная сборка. Что-нибудь подобное в вашем приложении?

Обратите внимание, что компилятор JIT не имеет отношения к csc, так что это не должно иметь к нему никакого отношения.

18.08.2010
  • @Джон Скит. Да, приложение использует сериализацию веб-служб, но во-первых, я создаю сборку сериализации во время компиляции, а во-вторых, если бы ее не было, она была бы создана при первом запуске приложения. 19.08.2010
  • @AngryHacker: Нет, я полагаю, что временные сборки сериализации генерируются при каждом запуске. Не удивлюсь, если проблема именно в этом. 19.08.2010
  • @AngryHacker # 2 Не совсем верно, если генерация не удалась. Например, я работал над приложением, которое всегда выдавало исключение при создании сборки сериализации из-за неправильного использования абстрактного базового класса; исключение можно увидеть только в том случае, если вы работаете в режиме отладки и изменяете настройки исключений, чтобы отображать выброшенные исключения, а не только необработанные исключения. Не говоря уже о том, что это применимо здесь. 19.08.2010
  • @ Ричард Хайн. Не могли бы вы рассказать о неправильном использовании абстрактного базового класса? Я вижу исключения в режиме отладки с настройкой параметров исключений, как вы предлагаете. 19.08.2010
  • @AngryHacker Ну, если это основная причина, вы должны получить исключение XmlSerializationException. Чтобы получить больше информации о том, почему (существует несколько причин, а не только проблема с абстрактным базовым классом, о которой я упоминал), вы должны запустить SGEN из командной строки для вашей сборки. (sgen /a: YourAssembly.dll) Вывод из этого должен немного сузить проблему. Я пытаюсь вспомнить сценарий с абстрактным базовым классом, в частности... если я смогу его воспроизвести, я опубликую обновление. 19.08.2010
  • @Richard Hein Оказывается, это не так - причина гораздо более безобидна ( stackoverflow.com/questions/3517470/ ) 19.08.2010
  • @AngryHacker Да, это ошибка, извините ... FileNotFoundException (не XmlSerializationException) ... потому что он не может найти сборку сериализации. Но причина, по которой он не может его найти, заключается в другой причине. Что-то не может быть сериализовано. Попробуйте запустить SGEN на своей сборке, чтобы узнать, что не удается сериализовать. 19.08.2010
  • @AngryHacker См. также социальные .msdn.microsoft.com/Forums/en-US/asmxandxml/thread/ — в данном случае SGEN не удалось выполнить из-за классов с одинаковыми именами. 19.08.2010
  • В ссылке, которую я дал, это всегда терпит неудачу. Я создал фиктивный проект только с моим классом, и он все равно потерпел неудачу. Я думаю, что это по дизайну. 19.08.2010

  • 2

    Если вы используете сериализацию, необходимо скомпилировать динамическую сборку, чтобы создать необходимые классы.

    Это означает, что большинство вызовов веб-служб будут вызывать csc.exe в первый раз. После этого динамическая dll должна быть кэширована.

    18.08.2010
  • Есть вызовы веб-сервиса. Однако каждый раз это один и тот же вызов, поэтому я предполагаю, что сборку сериализации нужно будет создать только один раз. Почему он создает его во второй раз (я предполагаю, что именно поэтому вызывается csc.exe). 19.08.2010
  • @AngryHacker Вы вручную создаете сборки сериализации? Если вы этого не сделаете (просто строите проект в обычном режиме), то сборки сериализации всегда создаются во время выполнения. Вы используете XmlSerializer с XmlTypeMapping или с XmlType? (для создания сериализации) 20.08.2010

  • 3

    Если вы используете XmlSerializer (напрямую или косвенно, т.е. при вызове веб-сервисов), то внутри он генерирует временную сборку с реализацией сериализатора: создает исходный файл на основе информации об отражении и компилирует его с помощью csc.exe. Вы можете предварительно сгенерировать сериализаторы во время разработки с помощью SGen< /а>.

    18.08.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..