找不到文件"C:\ WINDOWS\TEMP\xxxx.dll

web*_*oob 6 asp.net delphi serialization iis-7 xml-serialization

这是我尝试过的:

  1. 更改存储临时文件的目录.(在本地更改为每个网站).
  2. 将XMLSerialization对象存储在全局变量中,并使用它而不是每次都创建一个新变量.
  3. 删除Windows临时文件夹中的所有临时文件.
  4. 在windows\temp文件夹上设置权限(我现在将它们设置为每个人,只是为了尝试解决问题).

我的设置如下:

Windows 2008专用服务器上的IIS7.该网站使用Delphi在ASP.NET中编写.我有几个需要序列化的XML文件,而不仅仅是一个.我的网站与Web服务进行对话并处理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;
Run Code Online (Sandbox Code Playgroud)

gyu*_*isc 4

您需要向代码添加一些设置,以便能够调试序列化代码。请查阅 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>
Run Code Online (Sandbox Code Playgroud)

通过 .config 文件中存在此开关,C# 源文件将保留在临时目录中。如果您使用的是运行 Windows 2000 或更高版本的计算机,则对于在 ASPNET 帐户下运行的 Web 应用程序,临时目录的默认位置是 \Documents and Settings\\LocalSettings\Temp 或 \Temp。C# 文件很容易被错过,因为它们的文件名看起来非常奇怪,是随机生成的,例如:bdz6lq-t.0.cs。XmlSerializerPreCompiler 设置此诊断开关,以便您可以打开文件来检查 XmlSerializerPreCompiler 在记事本或 Visual Studio 中报告编译错误的行。