遇到 Web Server 中不能使用 XmlSerializer 的问题
2004-10-12 15:26
711 查看
刚刚解决了这个问题,查了N多的资料,终于被我解决了。
问题是如下的一段测试代码:
void ttt()
在本地直接调用的时候一切正常,但是放到WebServer下面就出错:
Exception: System.InvalidOperationException
Message: Unable to generate a temporary class (result=1).
error CS2001: Source file 'C:\WINNT\TEMP\awwihhwh.0.cs' could not be found
error CS2008: No inputs specified
Source: System.Xml
at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, CompilerParameters parameters, Evidence evidence)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, CompilerParameters parameters, Assembly assembly, Hashtable assemblies)
at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type)
开始就意识到肯定是调用者 ttt() 的权限不够,于是开始找如何把权限提高。首先用这个方法来强制提高权限,结果不幸:
PermissionSet ps = new PermissionSet(null);
ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.Infrastructure
//|SecurityPermissionFlag.SerializationFormatter
|SecurityPermissionFlag.RemotingConfiguration
|SecurityPermissionFlag.AllFlags
));
//ps.AddPermission(new FileIOPermission(System.Security.Permissions.PermissionState.Unrestricted));
ps.Assert();
然后开始考虑使用自定义的策略文件,找到了Microsoft Windows SharePoint Services 与代码访问安全,仿照它做了一个策略文件,在我的Web.config中加了如下的一段:
<system.web>
<securityPolicy>
<trustLevel name="aaa" policyFile="aaa.config"/>
</securityPolicy>
<trust level="aaa" originUrl=""/>
<!-- trust level="Full" originUrl=""/ -->
</system.web>
然后把系统的 C:\WINNT\Microsoft.NET\Framework\v1.1.4322\CONFIG\web_lowtrust.config 复制过来改名aaa.config,并在其中添加了一下内容,部分如下:
<NamedPermissionSets>
<PermissionSet class=" </PermissionSet>
<PermissionSet class="NamedPermissionSet" version="1" Name="_TtTtTtT_">
整个节点从节点 ASP.Net 复制过来的,改一个名字 _TtTtTtT_
</PermissionSet>
</NamedPermissionSets>
<CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="Nothing">
<!-- 在第一个 CodeGroup 之前插入 -->
<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="_TtTtTtT_">
<IMembershipCondition class="StrongNameMembershipCondition" version="1.1.1.12345"
Name="我的.dll"
PublicKeyBlob=" </CodeGroup>
<!-- 原来的内容 -->
</CodeGroup>
结果还是不行
,错误的原因是无法给“我的.dll”设置权限(看来以后还要多多研究这个内容)。
无奈之中,再到google搜索,结果发现确实有一个bug报告http://support.microsoft.com/default.aspx?scid=kb;en-us;322886,可惜是.net 1.0 的,我用的是1.1
。但是在这片文章http://support.microsoft.com/default.aspx?scid=317012中却明确要求ASP.net 正常运行需要有%installroot%\ASP.NET Temporary Files 和 %windir%\temp 两个目录的权限。
最后,检查两个目录的权限,发现前者有权限,而后者没有。于是设置 c:\winnt\temp 让 asp.net 有 Full Access权限。问题解决
!但是这个是不是M$的安装程序的问题啊
??
整个过程历时从前天下午到现在。痛苦
另外,发现很多人都遇到相同的问题,有仁兄建议说重装.net和vs,幸好没听他的,否则不累死也要后悔死。
问题是如下的一段测试代码:
void ttt()
在本地直接调用的时候一切正常,但是放到WebServer下面就出错:
Exception: System.InvalidOperationException
Message: Unable to generate a temporary class (result=1).
error CS2001: Source file 'C:\WINNT\TEMP\awwihhwh.0.cs' could not be found
error CS2008: No inputs specified
Source: System.Xml
at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, CompilerParameters parameters, Evidence evidence)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, CompilerParameters parameters, Assembly assembly, Hashtable assemblies)
at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type)
开始就意识到肯定是调用者 ttt() 的权限不够,于是开始找如何把权限提高。首先用这个方法来强制提高权限,结果不幸:
PermissionSet ps = new PermissionSet(null);
ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.Infrastructure
//|SecurityPermissionFlag.SerializationFormatter
|SecurityPermissionFlag.RemotingConfiguration
|SecurityPermissionFlag.AllFlags
));
//ps.AddPermission(new FileIOPermission(System.Security.Permissions.PermissionState.Unrestricted));
ps.Assert();
然后开始考虑使用自定义的策略文件,找到了Microsoft Windows SharePoint Services 与代码访问安全,仿照它做了一个策略文件,在我的Web.config中加了如下的一段:
<system.web>
<securityPolicy>
<trustLevel name="aaa" policyFile="aaa.config"/>
</securityPolicy>
<trust level="aaa" originUrl=""/>
<!-- trust level="Full" originUrl=""/ -->
</system.web>
然后把系统的 C:\WINNT\Microsoft.NET\Framework\v1.1.4322\CONFIG\web_lowtrust.config 复制过来改名aaa.config,并在其中添加了一下内容,部分如下:
<NamedPermissionSets>
<PermissionSet class=" </PermissionSet>
<PermissionSet class="NamedPermissionSet" version="1" Name="_TtTtTtT_">
整个节点从节点 ASP.Net 复制过来的,改一个名字 _TtTtTtT_
</PermissionSet>
</NamedPermissionSets>
<CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="Nothing">
<!-- 在第一个 CodeGroup 之前插入 -->
<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="_TtTtTtT_">
<IMembershipCondition class="StrongNameMembershipCondition" version="1.1.1.12345"
Name="我的.dll"
PublicKeyBlob=" </CodeGroup>
<!-- 原来的内容 -->
</CodeGroup>
结果还是不行
,错误的原因是无法给“我的.dll”设置权限(看来以后还要多多研究这个内容)。
无奈之中,再到google搜索,结果发现确实有一个bug报告http://support.microsoft.com/default.aspx?scid=kb;en-us;322886,可惜是.net 1.0 的,我用的是1.1
。但是在这片文章http://support.microsoft.com/default.aspx?scid=317012中却明确要求ASP.net 正常运行需要有%installroot%\ASP.NET Temporary Files 和 %windir%\temp 两个目录的权限。
最后,检查两个目录的权限,发现前者有权限,而后者没有。于是设置 c:\winnt\temp 让 asp.net 有 Full Access权限。问题解决
!但是这个是不是M$的安装程序的问题啊
??
整个过程历时从前天下午到现在。痛苦
另外,发现很多人都遇到相同的问题,有仁兄建议说重装.net和vs,幸好没听他的,否则不累死也要后悔死。
相关文章推荐
- 对于数据库操作可能会遇到的问题(空值问题以及出现的参数不能被重复使用问题)
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- mysql遇到不能使用mysql.sock启动的问题
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- 使用git时遇到可以克隆但不能推送自己的项目 的问题
- 使用MSChart时遇到的txt文件不能访问的问题
- 好久不做开发了,最近使用vs2008遇到了不能添加多个项目的问题,在此标记一下
- 创建ID3D11Device可能会遇到的问题,不能使用具体的IDXGIAdapter
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- oracle使用Union的时候遇到列格式clob和varchar2不符,不能转的问题
- 在使用BizTalk时遇到一个很郁闷的问题
- datagrid中使用dropdownlist编辑模版时遇到问题
- 在IIS 6 中使用HTTP压缩(Compression)遇到的一个问题
- 使用Data Access Application Block遇到的问题
- 使用logic:iterate遇到的问题
- VC6使用过程中遇到的问题收集(1) zz
- 关于SQL SERVER 2000在Windows Server 2003下不能使用的问题
- 在sps中遇到“不能添加用户,用户名已经存在”的问题的解决方法
- 使用Wallop 遇到的问题
- 求解在SQL中使用了where列所遇到的问题