System.InvalidOperationException:无法生成临时类(result = 1)

时间:2009-03-18 12:11:18

标签: c# input

我使用.net 3.5开发了一个应用程序,并将它作为.exe部署在具有相同环境的许多机器上。 但是,在一台特定的机器上,我收到以下错误。堆栈跟踪:


有关调用的详细信息,请参阅此消息的结尾 实时(JIT)调试而不是此对话框。

System.InvalidOperationException: Unable to generate a temporary class (result=1).
error CS2001: Source file 'C:\WINDOWS\TEMP\wz58eig4.0.cs' could not be found
error CS2008: No inputs specified

   at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
   at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters 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.GetSerializersFromCache(XmlMapping[] mappings, Type type)
   at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type)
   at System.Web.Services.Protocols.SoapClientType..ctor(Type type)
   at System.Web.Services.Protocols.SoapHttpClientProtocol..ctor()
   at SSOClient..ctor()
   at sc.tradesvc.SSOManager..ctor()
   at sc.tradesvc.SSOManager.get_Inst()
   at sc.cashflowgenerator.Controls.LoginForm.btnLogin_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.PerformClick()
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)

加载的程序集:

mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

CashflowGenerator
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/DATA/DEVEL/Output/CashflowGenerator.exe

System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll

System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll

System.Core
    Assembly Version: 3.5.0.0
    Win32 Version: 3.5.21022.8 built by: RTM
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll

System.Web.Services
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Services/2.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll

************** JIT调试************** 要启用实时(JIT)调试,请使用.config文件 应用程序或计算机(machine.config)必须具有 在system.windows.forms部分中设置的jitDebugging值。 还必须使用调试编译应用程序 启用。

例如:

    

启用JIT调试时,任何未处理的异常 将被发送到计算机上注册的JIT调试器 而不是由此对话框处理。


有人可以帮我这个吗?

由于我是.net的新手,有人也可以告诉我为什么需要首先创建一个临时课程?

11 个答案:

答案 0 :(得分:89)

我只是花了很多时间寻找答案,所以我想我会在这里添加它以免给别人带来一些麻烦。如果您使用xsd.exe工具生成您的cs,它可能已添加双数组[] [],其中数组应为[]。在生成的cs文件中将[] []替换为[],然后重试。

答案 1 :(得分:30)

XML序列化通过生成代码来执行序列化。这是在第一次需要时为此目的创建的临时程序集中完成的。

然而,这依赖于能够将程序集写入磁盘。 1

您的选项要么是(1)给定正在运行进程写入权限的用户帐户(对于ASP.NET应用程序,这可能是个坏主意)。 (2)使用SDK工具(sgen.exe)预生成(在开发/编译时)序列化程序集,然后使用(和deplot)该程序集。

1 未解决的问题:存在用于在内存中动态创建程序集的API:为什么不这样做?

答案 2 :(得分:24)

您只需在%windir%\ Temp。

上提供列表文件夹内容和读取权限

我在尝试修复问题时发现了这篇文章,并且没有给我的用户帐户写入权限。

From Microsoft

答案 3 :(得分:5)

您需要授予windows文件夹中的临时文件夹的权限。你的问题得到了解决............

答案 4 :(得分:3)

为最近的用户展示@ grzenio的评论:

如果你去Project Properties - >构建 - >生成序列化程序集 - > On,它强制在编译时生成XML序列化程序程序集,从而无需在运行时执行此操作。

反过来,这意味着您不需要更改文件系统权限(例如,如果您在Windows Azure网站上托管,那么这是非常有用的。)

答案 5 :(得分:2)

您需要向 C:\ Windows \ Temp文件夹添加具有读写权限的* IIS_IUSR *用户。

注意:每个用户都无法完全控制。

答案 6 :(得分:1)

它也可能只是序列化类中的一些简单错误(通常是某些复制/粘贴的结果)。例如,以下类将导致此错误:

  public class Foo
  {
      private string[] contexts;

      /// <remarks/>
      [System.Xml.Serialization.XmlArrayItemAttribute("Context", 
       typeof(Property), IsNullable = false)]
      public string[] Contexts
      {
          get { return this.contexts; }
          set { this.contexts = value; }
      }
  }

请注意,XmlArrayItem属性中的 typeof(Property)参数与字符串不兼容(最有可能)导致类似的异常:

System.InvalidOperationException: 
Unable to generate a temporary class (result=1).

如果 typeof(属性)替换为 typeof(字符串),序列化将再次有效。

答案 7 :(得分:0)

  

存在用于在内存中动态创建程序集的API:为什么不这样做?

只是一个疯狂的猜测:我认为这种可能性在.NET 1.0中尚不存在,或者至少在创建XmlSerializer并且MS不喜欢改变现有行为时......

答案 8 :(得分:0)

为C:\ WINDOWS \ TEMP&#39;提供读/写权限。夹。它会起作用。

答案 9 :(得分:0)

可能因为您正在IIS中切换应用程序池标识 是密码而不是预定义的 所以你有一个以下

  1. 返回预定义
  2. 为Windows临时文件夹
  3. 上的用户IWAM_WBSRV-01提供完全控制权

答案 10 :(得分:0)

如果这有助于任何人,我的问题来自序列化中使用的继承类。当我完整复制/粘贴我的课程时,问题就消失了,我正在序列化并使用ineritance退出。不幸的是,继承的优点消失了,但这比遇到这个问题要好。 (嘿,至少我很确定是什么解决了它。发生在那里的事情也发生了一些事情。)