Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 找不到文件";C:\WINDOWS\TEMP\xxxx.dll_Asp.net_Delphi_Serialization_Iis 7_Xml Serialization - Fatal编程技术网

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

Asp.net 找不到文件";C:\WINDOWS\TEMP\xxxx.dll,asp.net,delphi,serialization,iis-7,xml-serialization,Asp.net,Delphi,Serialization,Iis 7,Xml Serialization,以下是我尝试过的: 更改存储临时文件的目录。(本地更改为每个网站) 将XMLSerialization对象存储在全局变量中,并使用该变量,而不是每次创建一个新变量 删除windows临时文件夹中的所有临时文件 设置windows\temp文件夹的权限(我现在将其设置为everyone,只是为了尝试解决此问题) 我的设置如下: windows 2008专用服务器上的IIS7。 该网站是使用Delphi在ASP.NET中编写的。 我有几个XML文件需要序列化,所以不仅仅是一个。 我的网站与web服务

以下是我尝试过的:

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

    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;
    

    XML序列化在temp目录中的某个位置创建一个包含序列化代码的临时DLL。创建序列化程序时,此文件将加载到应用程序域中。清除临时目录时,可能正在删除此DLL,但由于某些原因,无法正确重新生成该DLL。

    您需要向代码中添加一些设置,以便能够调试序列化代码。请参阅以下有关msdn的文章

    还有一个巧妙的技巧,它可以将创建的文件保存在你的临时文件夹中,这样你就可以看到发生了什么

    在正常情况下 XmlSerializer删除C#源 序列化类的文件 当他们不再需要的时候。那里 是一个未记录的诊断开关, 然而,这将指导 XmlSerializer删除以保留这些 磁盘上的文件。您可以设置 在应用程序的.config中切换 文件:

    
    
    此开关出现在 .config文件,C#源文件保持不变 在临时目录中。如果你是 在运行Windows的计算机上工作 2000或更高版本,默认位置 临时目录为\Documents and Settings\\LocalSettings\temp或 \网络临时工 在ASPNET下运行的应用程序 账户C#文件很容易丢失 因为他们长得很怪, 随机生成的文件名, 类似于:bdz6lq-t.0.cs。这个 XmlSerializerPreCompiler设置此 诊断开关,以便您可以打开 要在其上检查行的文件 哪个是XmlSerializerPreCompiler 记事本中报告的编译错误 或者VisualStudio


    为了记录在案,我遇到了一个类似于此的错误,并从中找到了解决方案


    在设置临时文件夹的权限后,该错误的功能再次开始工作。

    您可以发布正在执行序列化的代码吗?在主帖子中添加了代码。您是否在web应用程序运行后清除临时文件夹?是的,我想是的,我记不清具体内容。问题是,问题并不总是存在,我会在早上上班,必须结束所有的网站进程,以摆脱这个问题。我没有太多的时间来整理它,因为这是一个客户现场站点,让他们启动并运行是主要的优先事项。您收到的确切错误消息是什么?这类消息通常表示序列化程序代码的生成及其编译失败。由于某种原因,xml部分没有显示在我的回答中:如果我添加代码以将文件保留在临时文件夹中,当然,这将解决问题,因为它应该总是能够找到dll的。对吗?我认为你的问题与将代码添加到临时文件夹不同。我猜dll丢失了,因为出于某种原因,它从未被创建过。例如编译。你需要找到原因并修复它,你会没事的。我认为它正在创建中,我已经添加了代码,现在我在临时文件夹中还有一些dll。在检查它们之后,它们将被用于我的各种XML文件来反序列化它们。这个问题并不总是发生,所以我想它必须创建它们(现在我已经保存了文件,我想这证实了这一点)。我昨晚没有出错,所以看起来不错。问题:有什么东西阻止我获取这些dll并在项目中使用它们反序列化吗?我还没有设法让斯根工作,所以这是一个可行的解决方案吗?p、 s如果我在第二天或第二天没有遇到任何问题,我会将你的帖子标记为答案小工具,谢谢。我只删除了一次.dll,所以我的情况不会是这样,但我同意这会是一个问题+1(对不起,论坛时间不长,所以忘了加上东西)。
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.diagnostics>
            <switches>
                <add name="XmlSerialization.Compilation" value="4" />
            </switches>
        </system.diagnostics>
    </configuration>