Где Xml Serializer хранит свой динамически сгенерированный код?
Сериализатор XML в System.Xml.Serialization
пространство имен генерирует XmlSerializationReader
а также XmlSerializationWriter
классы динамически с использованием CodeDOM.
Я хочу взглянуть на эти классы в дизассемблере.
Где сериализатор хранит временный файл сборки, содержащий этот динамически генерируемый код? Последние 30 минут я пытался найти его в Reflector, но безрезультатно.
Все, что я собираю из Reflector, это то, что он хранит его в некотором временном каталоге. Я посмотрел C:\temp, но там нет.dll. Я посмотрел C:\tmp, и там есть несколько файлов PNG, которые кажутся не настоящими PNG, а некоторыми двоичными файлами, сгенерированными Windows для хранения временных данных.
Если вы знаете, пожалуйста, скажите мне.
2 ответа
Есть простой способ: использовать sgen.exe
создать необходимую сборку самостоятельно.
На моей машине это выглядит так:
C:>"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sgen.exe" "C:\Projects\BIN\My.dll"
Microsoft (R) Xml Serialization support utility
[Microsoft (R) .NET Framework, Version 4.6.1055.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Serialization Assembly Name: My.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
Generated serialization assembly for assembly c:\projects\bin\My.dll --> 'c:\projects\bin\My.XmlSerializers.dll'.
Хорошо, эти две темы из дюжины или около того, относящиеся к этой проблеме, которые я посмотрел, раскрывают ответ.
Этот поток говорит, что это папка C: \ Windows \ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp
Но из трассировки стека, опубликованной в первоначальном вопросе в этой теме, видно, что временная папка среды Windows может быть найдена путем вызова System.IO.Path.GetTempPath()
где dll сохраняется.