Перекомпилируйте C# при выполнении без AppDomains

Ссылка на загрузку на 32 бита http://releases.ubuntu.com/lucid/ubuntu-10.04.4-server-i386.iso

загрузка запускается автоматически.

20
задан Community 23 May 2017 в 10:30
поделиться

2 ответа

Проверьте пространства имен вокруг Microsoft.CSharp.CSharpCodeProvider и System.CodeDom.Compiler.

Скомпилируйте коллекцию файлов .cs

Если быть довольно простым, например http://support.microsoft.com/kb/304655

Будет ли иметь значение, что я загружаю классы с одинаковыми именами в один и тот же процесс?

Вовсе нет. Это просто имена.

экземпляр класса, унаследованного от LevelController.

Загрузите созданную вами сборку, например, Assembly.Load и т. Д. Запросите тип, который вы хотите создать, с помощью отражения. Получите конструктор и вызовите его.

3
ответ дан 30 November 2019 в 01:33
поделиться

Ну, вы же хотите иметь возможность редактировать на лету, верно? это ваша цель, не так ли?

Когда вы компилируете сборки и загружаете их, теперь есть способ выгрузить их, если вы не выгружаете свой AppDomain.

Вы можете загружать предварительно скомпилированные сборки с помощью метода Assembly.Load, а затем вызывать точка входа через отражение.

Я бы рассмотрел подход динамической сборки. Где вы через свой текущий домен приложений говорите, что хотите создать динамическую сборку. Так работает DLR (среда выполнения динамического языка). С помощью динамических сборок вы можете создавать типы, реализующие некоторый видимый интерфейс, и вызывать их через него. Обратной стороной работы с динамическими сборками является то, что вы должны сами предоставить правильный IL, однако вы не можете просто сгенерировать его с помощью встроенного компилятора .NET. Бьюсь об заклад, в проекте Mono есть реализация компилятора C #, которую вы, возможно, захотите проверить. У них уже есть интерпретатор C #, который считывает исходный файл C #, компилирует его и выполняет, и это определенно обрабатывается через API System.Reflection.Emit.

Я не уверен насчет сборки мусора здесь, потому что когда речь идет о динамических типах, я думаю, что среда выполнения не выпускает их, потому что на них можно ссылаться в любое время. Только если сама динамическая сборка уничтожена и не существует ссылок на эту сборку, было бы разумно освободить эту память. Если вы повторно генерируете большой объем кода, убедитесь, что память в какой-то момент собрана сборщиком мусора.

У них уже есть интерпретатор C #, который считывает исходный файл C #, компилирует его и выполняет, и это определенно обрабатывается через API System.Reflection.Emit.

Я не уверен насчет сборки мусора здесь, потому что когда речь идет о динамических типах, я думаю, что среда выполнения не выпускает их, потому что на них можно ссылаться в любое время. Только если сама динамическая сборка уничтожена и не существует ссылок на эту сборку, было бы разумно освободить эту память. Если вы повторно генерируете большой объем кода, убедитесь, что память в какой-то момент собрана сборщиком мусора.

У них уже есть интерпретатор C #, который считывает исходный файл C #, компилирует его и выполняет, и это определенно обрабатывается через API System.Reflection.Emit.

Я не уверен насчет сборки мусора здесь, потому что когда речь идет о динамических типах. Я думаю, что среда выполнения не выпускает их, потому что на них можно ссылаться в любое время. Только если сама динамическая сборка уничтожена и не существует ссылок на эту сборку, было бы разумно освободить эту память. Если вы повторно генерируете большой объем кода, убедитесь, что память в какой-то момент собрана сборщиком мусора.

Не выпускайте их, потому что на них можно ссылаться в любое время. Только если сама динамическая сборка уничтожена и не существует ссылок на эту сборку, было бы разумно освободить эту память. Если вы повторно генерируете большой объем кода, убедитесь, что память в какой-то момент собрана сборщиком мусора.

Не выпускайте их, потому что на них можно ссылаться в любое время. Только если сама динамическая сборка уничтожена и не существует ссылок на эту сборку, было бы разумно освободить эту память. Если вы повторно генерируете большой объем кода, убедитесь, что память в какой-то момент собрана сборщиком мусора.

1
ответ дан 30 November 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: