2010-07-22 73 views
2

我們有一箇舊的asp應用程序,它可以實例化一個.NET com可見類。在這個類中,我們做了一些序列化來將對象存儲在會話中。在.NET中創建XMLSerializer會拋出異常

當我在測試類中調用以下代碼行時,它工作正常。

var cereal = new XmlSerializer(couponApplicator.GetType()); 

然而,當它被調用的網站和我調試,它引發以下錯誤:

{"Cannot execute a program. The command being executed was \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe\" /noconfig /fullpaths @\"C:\\WINDOWS\\TEMP\\rwot-yx9.cmdline\"."} System.SystemException {System.Runtime.InteropServices.ExternalException} 

我想也許這是有關權限,所以我試圖讓「每個人」完全控制到windows/microsoft.net文件夾以及windows/temp文件夾。作爲參考,我正在Windows XP機器上運行它。有任何想法嗎?

回答

2

想通了。

IIS鎖定工具已設置對windir目錄下所有* .exe可執行文件的拒絕權限。因此,我不得不刪除否認在Windows/microsoft.net /框架/ 2.0 /文件夾

的Cvtres.exe

CSC.EXE

然後,我給了這兩個文件的訪問權限IUSR和IWAM賬戶對這兩個文件以及windows temp目錄都有讀取和執行權限。

這是一個偉大的文章,解釋更多的細節:http://www.evilrob.org/journal/archives/2005/05/16/iusriwam-accoun.html

+0

高興你理解了它! – 2010-07-22 20:45:11

0

我發現我在序列化程序集時遇到了問題,因爲我在使用XML序列化時相當多地堅持應用程序設置等等,當我在Windows應用程序上工作時。我發現的是,通過使用sgen提前創建Serializer類型,而不是在運行時即時創建它們,我在LUA環境中部署得更加成功。

如果您確實不需要在運行時動態創建它們,那麼可能值得深入研究。這是非常直接的做法。只需在您的.NET項目中創建一個後期構建事件,該項目在包含您想要序列化的類型的程序集上調用sgen(確保它們標記爲[Serializable()]),只需包含部署時創建的* .XmlSerializers程序集,而您不應該在使用XmlSerializer時不必擔心任何特殊權限。