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

C# 在.NET中创建XMLSerializer会引发异常,c#,asp.net,iis,C#,Asp.net,Iis,我们有一个旧的asp应用程序,它实例化了一个.NET com可见类。在这个类中,我们进行了一些序列化以将对象存储在会话中 当我在我的测试类中调用以下代码行时,它可以正常工作 var cereal = new XmlSerializer(couponApplicator.GetType()); 但是,当它在网站中被调用并且我正在调试时,它会抛出以下错误: {"Cannot execute a program. The command being executed was \"C:\\WINDOW

我们有一个旧的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}

我认为这可能与权限有关,所以我尝试让“所有人”完全控制windows/microsoft.net文件夹以及windows/temp文件夹。作为参考,我在WindowsXP机器上运行这个。有什么想法吗?

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

如果您真的不需要在运行时动态创建它们,那么可能值得研究一下。这件事很直截了当。只需在.NET项目中创建一个生成后事件,在包含要序列化的类型的程序集上调用sgen(确保它们被标记为
[Serializable()]
),它只包含部署时创建的*.XmlSerializers程序集,使用XmlSerializer时不必担心任何特殊权限。

解决了这个问题

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

cvtres.exe

csc.exe

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

下面是一篇很好的帖子,解释了更多细节: