在.NET中创建XMLSerializer会引发异常

时间:2010-07-22 15:49:21

标签: c# asp.net iis

我们有一个旧的asp应用程序,它实例化一个.NET com可见类。在这个类中,我们进行一些序列化以将对象存储在会话中。

当我在我的测试类中调用以下代码行时,它工作正常。

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}

我想也许是权限相关所以我尝试将'EVERYONE'全部控制权交给windows / microsoft.net文件夹以及windows / temp文件夹。作为参考,我在Windows XP机器上运行它。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

想出来。

IIS Lockdown工具为windir目录中的所有* .exe可执行文件设置了拒绝权限。因此,我必须删除windows / microsoft.net / framework / v2.0 /文件夹中这两个文件的拒绝访问权限

的Cvtres.exe

CSC.EXE

然后,我给了IUSR和IWAM帐户读取和执行这些文件以及windows临时目录的权限。

这是一篇很好的帖子,解释了更多细节:http://www.evilrob.org/journal/archives/2005/05/16/iusriwam-accoun.html

答案 1 :(得分:0)

我发现我遇到了序列化程序集的问题,因为我在使用Windows应用程序时使用XML序列化来持久保存应用程序设置等。我发现通过使用sgen提前创建Serializer类型而不是在运行时动态创建它们,我在LUA环境中部署更成功。

如果你真的不需要在运行时动态创建它们,那么可能值得研究。这是非常直接的做法。只需在.NET项目中创建一个post build事件,该事件在包含要序列化的类型的程序集上调用sgen(确保它们标记为[Serializable()]),只需包含在创建时创建的* .XmlSerializers程序集。部署时,不应该在使用XmlSerializer时担心任何特殊权限。

相关问题