Не удалось найти файл "C: \ WINDOWS \ TEMP \ xxxx.dll - PullRequest
6 голосов
/ 23 февраля 2010

Вот что я пробовал:

  1. Изменить каталог, в котором хранятся временные файлы. (Изменен локально для каждого сайта).
  2. Сохраните объект XMLSerialization в глобальной переменной и используйте его вместо того, чтобы каждый раз создавать новый.
  3. Удалить все временные файлы в папке временных файлов Windows.
  4. Установка разрешений для папки windows \ temp (в данный момент они установлены для всех, чтобы попытаться решить проблему).

Моя настройка выглядит следующим образом:

IIS7 на выделенном сервере Windows 2008. Сайт написан на ASP.NET с использованием Delphi. У меня есть несколько файлов XML, которые нужно сериализовать, а не один. Мой веб-сайт общается с веб-сервисом и обрабатывает XML (я полагаю, это та часть, которая все ломает)

У кого-нибудь есть какие-либо предложения, кроме перечисленных? Я читал об использовании SGEN для предварительной компиляции объекта сериализации, но сработает ли это для нескольких файлов XML? Я не очень много знаю об этом.

Вот пример:

Это код одного из моих файлов XML. StockXMLSer хранится глобально и после тестирования создается только один раз для сайта.

function IntGetSTOCK_ITEMS(S: TStream): STOCK_ITEMS;
begin
  if not Assigned(StockXMLSer) then begin
     StockXMLSer := XmlSerializer.Create(STOCK_ITEMS.ClassInfo);
     OutputDebugString('StockXMLSer Serializer Created');
  end;
  Result := STOCK_ITEMS(StockXMLSer.Deserialize(S));
end;

Ответы [ 3 ]

4 голосов
/ 23 февраля 2010

Вам нужно будет добавить некоторые настройки в ваш код, чтобы иметь возможность отлаживать ваш код сериализации. Пожалуйста, обратитесь к следующей статье на MSDN.

Устранение неполадок, типичных для XmlSerializer

Также есть хитрый трюк, который сохранит файлы, созданные в вашей временной папке, чтобы вы могли видеть, что происходит.

При нормальных обстоятельствах XmlSerializer удаляет источник C # файлы для классов сериализации когда они больше не нужны. Там недокументированный диагностический переключатель, однако, который будет инструктировать XmlSerializer удаляет, чтобы оставить эти файлы на вашем диске. Вы можете установить включите .config вашего приложения Файл:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.diagnostics>
        <switches>
            <add name="XmlSerialization.Compilation" value="4" />
        </switches>
    </system.diagnostics>
</configuration>

При наличии этого переключателя в .config файл, исходные файлы C # остаются в вашем временном каталоге. Если ты работает на компьютере под управлением Windows 2000 или более поздняя версия, расположение по умолчанию для временного каталога есть \ Documents and Settings \\ LocalSettings \ Temp или \ Temp, для сети приложения, работающие под ASPNET учетная запись. Файлы C # легко пропустить потому что они очень странно выглядят, случайно сгенерированные имена файлов, что-то вроде: bdz6lq-t.0.cs. XmlSerializerPreCompiler устанавливает это диагностический переключатель, чтобы вы могли открыть файлы для проверки строк который XmlSerializerPreCompiler сообщили об ошибках компиляции в блокноте или Visual Studio.

2 голосов
/ 18 марта 2014

Просто для записи, у меня была ошибка, похожая на эту, и я нашел решение из этого блога

После установки разрешений для папки TEMP функционал, при котором ошибка снова начала работать.

2 голосов
/ 23 февраля 2010

XML Serialization создает временную DLL с кодом сериализации в нем, где-то во временном каталоге. Он загружается в ваш домен приложений при создании сериализатора. Возможно, вы удаляете эту DLL, когда очищаете каталог Temp, и по какой-то причине она не восстанавливается правильно.

...