По поводу доп. архива, совместимого с ХР (если речь шла именно об этом архиве, а не о том что был в статье [хотя тот тоже умер]): Год назад проект был переписан под .NET Core совместимость, если есть проблемы совместимости, то лишь из-за новой версии компилятора, которая не понимает последние версии шарпа в Visual Studio 2010. Я в том архиве выкладывал исходники с правками под более ранние версии Roslyn, но поддержка проекта давно прекращена и, к сожалению, на данный момент те исходники утеряны
По многочисленным просьбам, выкладываю в публичный доступ исходники библиотеки, совместимые с C# 4.0 (версия проекта 0.5.1). Запустятся на любых версиях студии, начиная с 2010 (проводил на них отладку на Windows XP).
Благодарю за ссылку, я добавил предложенный Вами вариант реализации в статью. Отлично подойдёт для случаев, когда из всех средств работы с AMF нужна только сериализация данных.
1. Момент с кэшированием я намеренно опустил при написании статьи, т.к. считаю что эта задача ложится полностью на самого разработчика. Если в исходной задаче требуется кешировать сформированных экземпляры типов — это должно быть реализовано уже непосрественно самим разработчиком целевого решения. Касательно повторной генерации ранее объявленных типов — в самой первой перегрузке метода GenerateType(object) есть проверка на наличие метаданных типа в сборке. Если он ранее уже был объявлен, инициализируем новый экземпляр типа и сохраняем в сборке с помощью typeBuider.CreateType(), иначе выполняем всю процедуру генерации метаданных типа.
2. Для решения задачи, описанной в статье, было достаточно использовать динамическую сборку, хранимую в памяти. Для Flex-сервера, на котором тестировалось данное решение, были важны только метаданные самих типов, информация о сборке при отправке на сервер не учитывалась. Нужно было лишь позаботиться о псевдонимах типов и их членов, что мы и сделали с помощью маппинга.
3. Согласен с этим моментом. Но считаю что для данной статьи он не критичен. Я упоминал, что тема рефлексии и IL это уже тема для отдельной, полноценной статьи, здесь же она затронута лишь на уровне самого базового понимания концепции.
На счёт Roslyn — так же соглашусь. Но хочу заметить, что статья изначально была рассчитана на разработчиков младшего и среднего звена, расширения компилятора C# это, на мой взгляд, решение более продвинутого уровня (хотя и тоже вполне решение задачи и вполне имеет место быть).
Да, я видел. С возможностями FluorineFX не сравнить.
1. Момент с кэшированием я намеренно опустил при написании статьи, т.к. считаю что эта задача ложится полностью на самого разработчика. Если в исходной задаче требуется кешировать сформированных экземпляры типов — это должно быть реализовано уже непосрественно самим разработчиком целевого решения. Касательно повторной генерации ранее объявленных типов — в самой первой перегрузке метода GenerateType(object) есть проверка на наличие метаданных типа в сборке. Если он ранее уже был объявлен, инициализируем новый экземпляр типа и сохраняем в сборке с помощью typeBuider.CreateType(), иначе выполняем всю процедуру генерации метаданных типа.
2. Для решения задачи, описанной в статье, было достаточно использовать динамическую сборку, хранимую в памяти. Для Flex-сервера, на котором тестировалось данное решение, были важны только метаданные самих типов, информация о сборке при отправке на сервер не учитывалась. Нужно было лишь позаботиться о псевдонимах типов и их членов, что мы и сделали с помощью маппинга.
3. Согласен с этим моментом. Но считаю что для данной статьи он не критичен. Я упоминал, что тема рефлексии и IL это уже тема для отдельной, полноценной статьи, здесь же она затронута лишь на уровне самого базового понимания концепции.
На счёт Roslyn — так же соглашусь. Но хочу заметить, что статья изначально была рассчитана на разработчиков младшего и среднего звена, расширения компилятора C# это, на мой взгляд, решение более продвинутого уровня (хотя и тоже вполне решение задачи и вполне имеет место быть).