2010-02-23 85 views
6

這是我曾嘗試:找不到文件「C: WINDOWS TEMP xxxx.dll

  1. 變化,其中臨時文件的存儲目錄(本地更改爲每個網站)。
  2. 存儲在一個全局變量和使用,而不是創建一個新的每次。
  3. 即刪除Windows Temp文件夾中的所有臨時文件的XMLSerialization對象。
  4. 在WINDOWS \ TEMP文件夾的權限(我有他們目前設置給每個人只是爲了嘗試解決問題)

我的設置如下:在Windows

IIS7 2008專用服務器。這個網站是用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; 
+0

你可以發佈你正在做序列化的代碼嗎? – used2could 2010-02-23 14:03:04

+0

向主帖添加了代碼。 – webnoob 2010-02-23 14:11:22

+0

您是否在Web應用程序運行後清除了臨時文件夾? – Nick 2010-02-23 14:31:01

回答

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或更高版本的電腦上工作,對於臨時目錄的默認位置 是\的Documents and Settings \\ LocalSettings \ TEMP或 的\ Temp,對於Web 的ASPNET 帳戶下運行的應用程序。 C#文件很容易錯過 ,因爲它們看起來很奇怪, 隨機生成的文件名, 類似:bdz6lq-t.0.cs。 XmlSerializerPreCompiler設置此 診斷 切換,這樣你就可以打開 文件來檢查線路上 其XmlSerializerPreCompiler 報道編譯錯誤在記事本 或Visual Studio。

+0

出於某種原因,XML部件沒有顯示在我的回答了:<?XML版本= 「1.0」 編碼= 「UTF-8」> <結構> <添加名稱=「XmlSerialization.Compilation」 VALUE =「4」 /> gyurisc 2010-02-23 15:30:52

+0

如果我在添加代碼的文件保存的臨時文件夾中,肯定會解決這個問題,因爲它應該始終能夠找到dll的。那是對的嗎? – webnoob 2010-02-24 16:47:48

+0

我認爲你的問題不同於將代碼添加到臨時文件夾。我想這個DLL丟失了,因爲它從來沒有被創建出於某種原因。例如彙編。你需要找到這個原因並修復它,你會沒事的。 – gyurisc 2010-02-24 19:16:25

2

XML序列化會創建一個臨時DLL,其中包含序列化代碼,位於臨時目錄中的某處。當序列化程序被創建時,它會被加載到你的App域中。當您清除Temp目錄時,可能會刪除此DLL,並且出於某種原因,它無法正確重新生成。

+0

+1我沒有在我的回答中提到這個概念 – gyurisc 2010-02-25 08:50:17

+1

我只刪除了一次.dll,所以這不是我的情況,但我同意這會是一個問題。 +1(抱歉,沒有在論壇上長時間,所以忘了加上一些事情)。 – webnoob 2010-02-26 09:07:57

2

只是爲了記錄在案,我有類似這樣的錯誤,並發現從this blog

溶液凝固的TEMP文件夾的權限後,該錯誤已開始重新工作的功能。

相關問題