.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が初めてなので、誰かが一時クラスを最初に作成する必要がある理由を教えてもらえますか?
XMLシリアル化は、シリアル化を実行するコードを生成することにより機能します。これは、そのために初めて必要になったときに作成された一時的なアセンブリで行われます。
ただし、これはアセンブリをディスクに書き込むことができることに依存しています。1
オプションは、(1)プロセスの書き込み許可を実行しているユーザーアカウントを指定します(ASP.NETアプリケーションの場合、これは悪い考えである可能性が高い)。 (2)SDKツール( sgen.exe )を使用して、シリアル化アセンブリを(開発/コンパイル時に)事前に生成し、そのアセンブリを使用(およびデプロット)します。
1未解決の質問:メモリー内に動的にアセンブリを作成するためのAPIがあります。なぜそうしないのですか?
私はこれに対する答えを探すのに多くの時間を費やしたので、他の人の頭痛を軽減するためにここに追加すると思いました。 xsd.exeツールを使用してcsを生成する場合、配列が[]であるはずの場所に二重配列[] []が追加されている可能性があります。生成されたcsファイル内のすべての[] []を[]に置き換えて、再試行してください。
%windir%\ Tempに対して、フォルダーの内容の一覧表示と読み取りのアクセス許可を与えるだけです。
問題を修正しようとしたときにこの投稿を見つけました。ユーザーアカウントに書き込みアクセス権を付与する必要はありませんでした。
Windowsフォルダーにある一時フォルダーにアクセス許可を与える必要があります。そして、あなたの問題は解決されます...........
最近のユーザー向けに@grzenioのコメントをもう少し詳しく説明します。
[プロジェクトプロパティ]-> [ビルド]-> [シリアル化アセンブリの生成]-> [オン]に移動すると、コンパイル時にXMLシリアライザーアセンブリが強制的に生成され、実行時に行う必要がなくなります。
これは、ファイルシステムのアクセス許可を変更する必要がないことを意味します(たとえば、Windows Azure Webサイトでホストしている場合、これはオプションではありません)。
読み取り/書き込み権限を持つ* IIS_IUSR *ユーザーをC:\ Windows\Tempフォルダーに追加する必要があります。
[〜#〜] note [〜#〜]:すべてのユーザーがフルコントロールで作業することはありません。
また、シリアル化されたクラスの単純なエラー(通常はコピー/貼り付けの結果)である可能性もあります。たとえば、次のクラスはこのエラーの原因になります。
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)に置き換えられた場合、シリアル化は再び機能します。
IIS
のアプリケーションプーリングIDを事前定義ではなくパスワードに切り替えているため、次のいずれかが原因である可能性があります。
aPIがメモリ内に動的にアセンブリを作成するために存在します。なぜそうしないのですか?
ちょっとワイルドな推測:。
これが誰かを助ける場合、私の問題はシリアライゼーションで使用される継承されたクラスから来ていました。クラスを完全にコピー/貼り付けてシリアライズし、継承を使用して終了すると、問題はなくなりました。残念ながら、継承の利点はなくなりましたが、この問題を抱えるよりも優れています。 (ねえ、少なくとも私はそれがそれを解決したものだとかなり確信しています。
「C:\ WINDOWS\TEMP」フォルダーに読み取り/書き込み権限を付与します。それが動作します。