63

.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を初めて使用するので、そもそもなぜ一時クラスを作成する必要があるのか​​、誰かに教えてもらえますか?

4

11 に答える 11

107

これに対する答えを探すのに多くの時間を費やしたので、他の人の頭痛の種を減らすためにここに追加すると思いました. xsd.exe ツールを使用して cs を生成すると、配列が [] であるはずの場所に二重配列 [][] が追加されている可能性があります。生成された cs ファイル内のすべての [][] を [] に置き換えて、再試行してください。

于 2014-03-06T12:25:46.440 に答える
30

XMLシリアル化は、シリアル化を実行するコードを生成することによって機能します。これは、最初に必要になったときにその目的のために作成された一時的なアセンブリで行われます。

ただし、これはアセンブリをディスクに書き込めることに依存しています。1

オプションは、(1)プロセス書き込みアクセス許可を実行しているユーザーアカウントを指定することです(ASP.NETアプリケーションの場合、これは悪い考えである可能性があります)。(2)SDKツール(sgen.exe)を使用して(開発/コンパイル時に)シリアル化アセンブリを事前生成し、そのアセンブリを使用(およびデプロット)します。

1未解決の質問:APIは、メモリ内に動的にアセンブリを作成するために存在します。なぜそうしないのですか?

于 2009-03-18T12:16:51.730 に答える
24

リストフォルダの内容と読み取り権限を%windir%\Tempに与えるだけです。

問題を解決しようとしたときにこの投稿を見つけました。ユーザーアカウントに書き込みアクセス権を付与する必要はありませんでした。

Microsoftから

于 2009-04-07T09:00:14.487 に答える
5

Windowsフォルダーにある一時フォルダーにアクセス許可を与える必要があります。そしてあなたの問題は解決されます........

于 2011-08-17T11:10:32.460 に答える
4

C:\Windows\Temp フォルダーに読み取り/書き込み権限を持つ *IIS_IUSR* ユーザーを追加する必要があります。

: Everyone ユーザーはフル コントロールでは動作しません。

于 2013-02-18T09:26:30.507 に答える
3

最近のユーザー向けに、@grzenio のコメントをもう少し紹介します。

[プロジェクト プロパティ] -> [ビルド] -> [シリアライゼーション アセンブリの生成] -> [オン] に移動すると、コンパイル時に XML シリアライザー アセンブリが強制的に生成されるため、実行時に生成する必要がなくなります。

つまり、これは、ファイル システムのアクセス許可を変更する必要がないことを意味します (たとえば、Windows Azure Web サイトでホストしていて、それがオプションではない場合に役立ちます)。

于 2014-03-18T10:45:46.993 に答える
2

また、シリアル化されたクラスの単純なエラー (通常はコピー/貼り付けの結果) である可能性もあります。たとえば、次のクラスではこのエラーが発生します。

  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)に置き換えると、シリアル化が再び機能します。

于 2014-08-28T15:02:24.300 に答える
0

アセンブリをメモリ内で動的に作成するための API が存在します。

大雑把な推測ですが、この可能性は .NET 1.0 にはまだ存在していなかったと思います。少なくとも、XmlSerializer が作成され、MS が既存の動作を変更することを好まなかったときは...

于 2009-03-18T12:43:38.047 に答える
0

IIS アプリケーションプールIDを事前定義ではなくパスワードに切り替えているため、次のいずれかがオフになっている可能性があります

  1. 事前定義に戻る
  2. Windows temp フォルダーのユーザー IWAM_WBSRV-01 に完全な制御権限を与える
于 2013-11-10T13:12:00.287 に答える
0

「C:\WINDOWS\TEMP」フォルダに読み取り/書き込み権限を付与します。それが動作します。

于 2013-03-11T11:56:06.137 に答える