問題タブ [sgen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2005 - Visual Studio 2005 が Xml シリアル化アセンブリを生成しないのはなぜですか?
プロジェクト設定の [シリアル化アセンブリの生成] を [オン] に設定すると、Visual Studio 2005 でシリアル化設定が生成されないのはなぜですか?
c# - XmlSerializer、sgen.exe、ジェネリック
私はジェネリック型を持っています:
この型のインスタンスを XML との間で逆シリアル化/シリアル化したいと考えています。IContent
は次のように定義されています。
Packet
基本的に、コンテンツによって提供されるシリアライザーを使用して、コンテンツ メンバーをシリアライズおよびデシリアライズしたいと考えています。このシリアライザーは、実際には、sgen.exe によって生成されたコンパイル済みの xml シリアライザーのインスタンスです。
Packet<T>
実装せずに可能IXmlSerializable
ですか?
c# - XMLファイルを逆シリアル化する最も効率的な方法は何ですか?
アロハ、
逆シリアル化したい 8MB の XML ファイルがあります。私はこのコードを使用しています:
このコードは約 1 分で実行されますが、これはかなり遅いように思えます。sgen.exe を使用してシリアル化 dll をプリコンパイルしようとしましたが、パフォーマンスは変わりませんでした。
パフォーマンスを向上させるには、他にどのようなオプションがありますか?
[編集] (基本的な) 変換を実行するには、逆シリアル化によって作成されたオブジェクトが必要です。XML は外部 Web サービスから受信されます。
.net - XmlAttributeOverrides を使用して XmlSerializers をプリコンパイルする
.NET で XmlSerializer インスタンスを構築すると、指定された型をシリアル化および逆シリアル化するためのアセンブリが動的に生成されます。これは時間のかかるプロセスです。Microsoft の sgen.exe ツールを使用すると、XmlSerializer インスタンスをプリコンパイルして、動的に生成せずに後で使用できます。残念ながら、これは XmlAttributeOverrides を使用する XmlSerializer インスタンスでは不可能です。
これらの XmlSerializer インスタンスをプリコンパイルして実行時の生成を回避する方法はありますか?
.net - アプリケーションが実行中に CSC を使用する理由
私は Remotesoft Linker と Mini Deployment ツールを使って、マネージ コードから単一のネイティブ実行可能ファイル (フレームワークのインストールを必要としない) を作成する実験を行ってきました。構成可能な機能の 1 つは、csc.exe が最終的な実行可能ファイルに使用できるかどうかです。そのドキュメントには、通常、XML シリアライゼーションを使用する場合にのみ必要であると書かれています (私はそうです)。SGen を使用してシリアル化アセンブリを作成するようにビルド プロセスを変更し、xml クラスを使用するソリューション内の各プロジェクトの参照に結果を追加しました。シリアル化クラスは、リンクされた .net 実行可能ファイル (すべての .net dll が 1 つのマネージド exe に結合されたもの) になります。したがって、適切に構成されていると思います。
ただし、私のアプリは実行時に csc を実行しようとします。シリアライゼーション アセンブリに何か問題があり、実行時に再作成されているのでしょうか。または、私のアプリはcscを必要とする何か他のことをしていますか?どうすれば何を判断できますか?
http://www.remotesoft.com/linker/
ビルドの一部として Xml Serialization アセンブリを生成する
編集:変更された app.config を使用していくつかのテストを行い、シリアル化ファイルが生成された場合に表示されるようにしました(ビルド時の生成を元に戻すことによってテストされました)。以前は適切に作成していたようです。実行時に csc を呼び出し、別のフラグを使用してその結果を再表示するフレームワークの別の部分がない限り、おそらく RemoteSoft ツールが原因であると思います。ただし、出力された実行可能ファイルは、注入された app.config ファイルが指示したとしても、作成した一時ファイルを表示したままにしないため、確信が持てません。
私が使用したapp.infoはこれでした。他の場所で値 4 を使用した例を見ましたが、それらの動作の違いを見つけることができませんでした。
.net - SGEN、InternalsVisibleTo、およびアセンブリ署名
ちょっと変わったことをしようと...
私はこのクラス Foo を持っています:
Name の内部セッターと、内部のデフォルト コンストラクターに注意してください。これにより、通常は XML シリアライゼーションが妨げられますが、XML シリアライゼーション アセンブリを InternalsVisibleTo の「フレンド」としてマークしました。
そして、シリアル化アセンブリを事前生成する MSBuild タスクを追加しました。
これは正常に機能します。Name プロパティは正しくシリアル化および逆シリアル化されます。
アセンブリに署名したいので、アセンブリのキー ファイルを定義し、キーに一致するように InternalsVisibleTo 宣言を変更します。
しかし、今 SGEN は失敗します:
一時クラスを生成できません (結果 = 1)。
プロパティまたはインデクサー 'TestXML2008.Foo.Name' を割り当てることができません -- 読み取り専用です
SGEN タスクはマクロを介してキー ファイルを選択する必要がありますが、明らかにそれだけでは十分ではありません... また、SGEN タスクでキー ファイルを明示的に指定しようとしましたが、成功しませんでした。コマンドラインで sgen.exe を使用すると、同じ結果が得られます...
何か不足していますか?アセンブリに署名すると機能しない理由がわかりません...
.net - Sgen.exe のバグ
sgen.exe がジェネリック型 XmlSerializer を生成できなかったようですね。
私の一般的なタイプ:
シリアライザ コード:
sgen.exe を実行し、"Reflector" を使用して生成されたアセンブリを確認した後、生成されたアセンブリに MasterxXmlSerializer クラスが含まれていないことがわかりました。なぜですか?
誰かが同じ経験をしていますか?修正方法は?
.net - Sgen と ILMerge を使用した XmlSerializers の事前生成。配列の問題
私は XmlSerializer を広範囲に使用しており、.NET が実行時に必要なシリアル化アセンブリを生成できるようにするのではなく、事前にこれらのアセンブリを生成してアプリケーションにバンドルしたいと考えています。Sgen を使用して、ビルド時にこれらのアセンブリを生成できます。さらに、シリアル化する配列の種類ごとに Sgen を個別に実行する必要があります (sgen /t:Foo[] を使用)。最後に、ILMerge を使用して、配列型のシリアル化クラスを Foo.XmlSerializers.dll アセンブリにマージします。Foo.XmlSErializers.dll に実際にマージされたすべてのクラスが含まれていることを ildasm で確認しました。
実行時に、.NET は、csc を呼び出して一時アセンブリを生成することなく、Foo.XmlSerializers.dll から FooSerializer を正常に読み込みます。ただし、.NET は同じ dll から ArrayOfFooSerializer をロードできず、実際には csc を呼び出します。
配列のシリアル化タイプを事前に生成するにはどうすればよいですか?
次の 2 つのアセンブリとその簡略化された内容を考えてみましょう。
アセンブリ: MyApp.exe
アセンブリ: Foo.dll
詳細情報:
次の app.config により、XmlSerialization 関連のイベントがイベント ログに追加されます。
Foo タイプのイベントはありません。Foo[] に対して次のメッセージが表示されます。
事前に生成されたシリアライザー 'Foo.XmlSerializers' の有効期限が切れました。「Foo[]」のシリアライザーを再生成する必要があります。
c# - sgen.exe x64 .net c# が「正しくない形式のアセンブリ」で失敗する
私はvs2008でws2008 x64を持っています。
vsをx64に設定して(64ビットdllがあるため)コンパイルを実行すると、sgenは次のように述べています
正しくない形式のアセンブリをロードしようとしました
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ からの VS takse sgen
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\x64\ から取得する必要があると思います
sgen の 64 ビット バージョンを取得して C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ に配置すると (32 ビット バージョンを置き換えます)。コンパイルできました。
vs. の下で sgen の正しいバージョンを指すにはどうすればよいですか?
1 つのプロジェクトのソリューション プラットフォームを構成して、正しい sgen (x86 から 32 ビットおよび x64 から 64 ビットの sgen バージョン) を指すようにすることはできますか?
.net - sgen.exeにアセンブリのバージョンを保持させる方法は?
アセンブリのシリアル化アセンブリを作成したい。 sgen
うまくいきますが、シリアル化アセンブリにソースアセンブリと同じバージョンを割り当てる方法がわかりません。
何か案は?