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

时间:2010-02-23 14:00:27

标签: asp.net delphi serialization iis-7 xml-serialization

以下是我的尝试:

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

    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;
    

3 个答案:

答案 0 :(得分:4)

您需要在代码中添加一些设置才能调试序列化代码。请参考msdn上的以下文章。

Troubleshooting Common Problems with the 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或更高版本,默认位置   对于temp目录是\ Documents and Settings \\ LocalSettings \ Temp或   \ Temp,适用于网络   在ASPNET下运行的应用程序   帐户。 C#文件很容易被遗漏   因为他们看起来很奇怪   随机生成的文件名,   类似于:bdz6lq-t.0.cs。该   XmlSerializerPreCompiler设置了这个   诊断开关,所以你可以打开   检查行的文件   其中XmlSerializerPreCompiler   在记事本中报告了编译错误   或Visual Studio。

答案 1 :(得分:2)

XML Serialization创建一个临时DLL,其中包含序列化代码,位于temp目录中的某个位置。创建序列化程序时,会将其加载到App Domain中。清除Temp目录时可能会删除此DLL,并且由于某种原因,它无法正确重新生成。

答案 2 :(得分:2)

仅为了记录,我遇到了与此类似的错误,并从this blog找到了解决方案

在TEMP文件夹上设置权限后,错误开始再次起作用的功能。