【问题标题】:System.InvalidOperationException: Unable to generate a temporary class (result=1)System.InvalidOperationException:无法生成临时类(结果 = 1)
【发布时间】:2009-03-18 12:11:17
【问题描述】:

我使用 .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 的新手,有人能告诉我为什么首先需要创建一个临时类吗?

【问题讨论】:

标签: c# input


【解决方案1】:

我刚刚花了很多时间来寻找这个问题的答案,所以我想我会在这里添加它,以免其他人感到头疼。如果您使用 xsd.exe 工具生成您的 cs,它可能添加了双数组 [][],其中数组应该是 []。将生成的 cs 文件中的所有 [][] 替换为 [] 并重试。

【讨论】:

  • 我自己也遇到了这个问题——我几乎很想用一个更容易发现的标题来问这个明确的问题,这样你就可以再次回答它。很好看!
  • 这是“唯一”正确答案。当我看到生成的带有双数组 [][] 的代码时,我也感到困惑。但很高兴你找到并找到了这个工具。非常感谢。
  • @GeraldG。显然不是!这是人们可能会看到 OP 中报告的症状的另一个原因。这并不能使它成为 /only/ 的答案。症状可能具有欺骗性
  • +1 - 也为我节省了很多时间!谢谢大人!不敢相信 XSD 会做出如此愚蠢的事情……哦等等,XSD 是愚蠢的。不应该对这个怪异的错误感到惊讶。 THNX 再次 m8
  • 非常感谢!我使用了 WSDL.exe 工具,它确实做到了!一旦我删除了 ()(),它就解决了这个问题!
【解决方案2】:

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

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

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

1开放式问题:存在 API 以在内存中动态创建程序集:为什么不这样做?

【讨论】:

  • 在VS08中我认为在项目属性中甚至有一个复选框来生成它。
  • 如果在内存中创建,则需要在 AppDomain 重新启动时重新创建。在磁盘上创建它们,然后它们留在磁盘上?我不知道是不是这个原因,因为我想知道重启后它们是否会具有相同的名称。
【解决方案3】:

您只需在 %windir%\Temp 上授予列表文件夹内容和读取权限。

我在尝试解决我的问题时发现了这篇文章,并且不必授予我的用户帐户写入权限。

From Microsoft

【讨论】:

  • 请记住在属于域的计算机上选择正确的 IUSR/IIS_IUSRS 帐户。我首先为域添加 ISUR 帐户,但它必须是本地计算机的 IIS_IUSRS 帐户。正如 BillRob 所说,不需要写权限。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      如果您转到项目属性 -> 构建 -> 生成序列化程序集 -> 开,它会强制在编译时生成 XML 序列化程序程序集,而无需在运行时这样做。

      反过来,这意味着您不需要更改文件系统权限(例如,如果您在 Windows Azure 网站上托管,而这不是一个选项,则很有用)。

      【讨论】:

        【解决方案7】:

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

          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(Property) 替换为 typeof(string) 序列化将再次起作用。

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            为“C:\WINDOWS\TEMP”文件夹提供读/写权限。它会起作用的。

            【讨论】:

              【解决方案10】:

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

              1. 返回预定义
              2. 在 windows 临时文件夹中将权限完全控制权授予用户 IWAM_WBSRV-01

              【讨论】:

                【解决方案11】:

                如果这对任何人都有帮助,我的问题来自序列化中使用的继承类。当我对我正在序列化的课程进行完整复制/粘贴并使用 ineritance 退出时,问题就消失了。不幸的是,继承的优势消失了,但这比遇到这个问题要好。 (嘿,至少我很确定这就是解决它的原因。碰巧在那里也重新启动了。)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-04-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-11-26
                  相关资源
                  最近更新 更多