問題タブ [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.
c# - public ジェネリック メソッドの where 句で SGEN が失敗する
SGEN を使用してシリアライゼーション アセンブリをプリコンパイルするプロジェクトがあります (/proxytypes フラグなし)。このプロジェクトでは、これまで内部にあったクラスが存在します (したがって、sgen はそれをそのままにしておきます)。クラスをパブリックにする必要がありますが、そうするだけで sgen が次のエラーで失敗します。
タイプ 'Infragistics.Shared.DisposableObject' は、参照されていないアセンブリで定義されています...'
このアセンブリは実際に参照されており、常に参照されています。参照されていない場合、アセンブリ自体はコンパイルされません。バージョンも正確に一致し、参照では特定のバージョンがオフになっています。
最初の紛らわしい部分は、このクラスには public 状態がない (public フィールドもプロパティもまったくない) ことです。これは、シリアル化の適切な候補にはなりません。
さらに紛らわしいのは、唯一無二のパブリック (ジェネリック) メソッドの where 句を削除すると、sgen がアセンブリを適切に処理できるようになることです。
これは、明示的に実装されていない公開された唯一のものを持つクラスです(インターフェイスには2つのメソッドが実装されていますが、関係ありません):
注: UIElement は、失敗したときに sgen が見つけられないタイプである DisposableObject から継承します。where 句をコメントアウトすると、UIElement はまだ別の場所で使用されていますが、sgen はそれについて不満を抱いていません。Support() メソッドを internal とマークすると、sgen は公開されているものだけを処理するため、sgen も完了できます。
そもそも、sgen が Web サービス以外のパブリック メソッドを気にするのはなぜでしょうか。
where句の存在だけでつまずくのはなぜですか?
この特定のケースで、アセンブリが明らかに存在するのに、sgen によってアセンブリが見つからないのはなぜですか?
.net - シリアル化から特定の型を除外する方法は?
sgen
数メートルの種類のアセンブリに対して実行します。2種類を連載対象外にしたい。私はそれを行う方法を見つけることができないようです。
sgen
特定のタイプを指定するスイッチがあります/type
が、特定のタイプを除外するスイッチはありません。
特定の型をシリアル化から除外する方法はありますか?
c# - XML Serializer Generator Tool (Sgen.exe) to generate 64-bit Windows DLL?
I am building a 64-bit C# .NET DLL in Visual Studio 2010. My project's post-build steps include the running of sgen.exe to generate a corresponding XmlSerializer DLL for my assembly. (I'm trying to load a CLR function into SQL Server 2012. The function does some XML serializing.)
Is there a way to generate 64-bit code with any version of sgen.exe? Or is there a particular Windows SDK that I should install? Can't seem to find a download site.
.net - 64 ビット サーバーでの遅延署名を使用した SGEN
ビルド サーバーで .NET ソリューション ビルドの一部として SGEN を呼び出すと、SGEN がエラーをスローする問題を解決しようとしています。サーバーのコマンドラインからビルドを実行して、CIサーバーを要因として排除しています。
表示される具体的なエラー メッセージは次のとおりです。
SGEN : エラー : ファイルまたはアセンブリ 'MyAssembly.dll、Version=0.0.0.0、Culture=neutral、PublicKeyToken=56e8273d901d717f' またはその依存関係の 1 つを読み込めませんでした。厳密な名前の検証に失敗しました。(HRESTULT からの例外: 0x013141A)
コマンド ラインからビルド スクリプトを実行しても、その他のエラーは発生しません。
問題のアセンブリは遅延署名されたアセンブリであり、指定されたトークンと一致する公開キーで構築されています。
サーバーでは、sn.exe ツール ( *,56e8273d901d717f
) を使用して検証スキップ用のキー トークンを登録しました。これは、完全な署名段階が試行される前に、ビルド プロセスのテスト ステップの一部を実行するために必要なためです。
ビルド プロセスは、開発者のデスクトップと Win2K3 サーバーで正常に動作します。これらのテストは、古いボックスを置き換える新しい Win2k8R2 サーバーで実行しています。
c# - sgen.exe & Oracle.DataAccess.dll の問題 (Visual Studio 2012)
Web サービス プロジェクトを Visual Studio 2010 から Visual Studio 2012 に移行しようとしました。プロジェクトは Oracle.DataAccess.dll (v 11.2.0.3 32 および 64 ビット) を使用し、sgen.exe で *.XmlSerializers.dll を作成します。
sgen.exe は、Oracle.DataAccess.dll を含むプロジェクトの XmlSerailizer.dll の作成に常に失敗します。ソリューションを AnyCPU としてビルドする必要があります。
受け取るエラー メッセージは次のとおりです。 SGEN : エラー : アセンブリを正しくない形式でロードしようとしました: c:\oracle\x64\product\11.2.0\client_1\ODP.NET\bin\4\Oracle .DataAccess.dll。
Visual Studio 2010 と 2012 を並べてインストールしただけでも、どちらのスタジオでも Webservice プロジェクトをビルドすることはできません。
これまでのところ、問題の解決策を見つける試みはすべて失敗しています。誰かが同様の星座を持っていて、問題の解決策を見つけましたか?
c# - SGen は親アセンブリの FileVersion を使用しません
SGen は、親アセンブリのファイル バージョンではなく、代わりに AssemblyVersion を使用しているようです。これは、厳密な名前を一定に保ち、MSI API と互換性のあるパッチを介してリリースする場合に問題になります。
たとえば、新しいデータ型が追加された場合、生成された XmlSerializers アセンブリにターゲット マシンでパッチを適用する必要があります。ただし、MSI はファイル バージョン (等しい) のみを確認し、何もしません。
ソース アセンブリからのファイル バージョンを使用するように SGen に指示する方法はありますか?
例:
ソース アセンブリ:
生成されたシリアライザー アセンブリは、ファイルおよび製品バージョンの PE ヘッダーで 2.0.0.0 を取得します。これは間違っています。
最後の手段として、生成されたアセンブリのファイル バージョンにパッチを適用することを検討しますが、少なくとも以前の .NET バージョンでは、 PE ヘッダーを含む完全なファイル。
visual-studio-2008 - SGEN エラー: VS2008 で不適切な形式のアセンブリを読み込もうとしました
いくつかの同様の質問と回答を見つけることができましたが、私の状況に当てはまる回答や正確な条件はありませんでした.
- x64 用にビルドされている .NET 3.5 プロジェクトがあります。
- また、x64 混合モード リファレンスもあります (これも .NET 3.5 を対象としています)。
- Visual Studio 2008 で、リリース ビルド中に SGEN を実行してヘルパー DLL を作成する Web 参照を作成しました。
を参照しない場合mixed-mode DLL
、これは正常に機能します。混合モードの DLL を参照すると、次のエラーが発生します (xxx は単なるプレースホルダーです)。
SGEN : エラー : 不適切な形式のアセンブリを読み込もうとしました: C:\code\xxx\trunk\xxx\common\xxx\build\winx64\lib\xxx.dll.
これは発行されるコマンドです:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sgen.exe /assembly:C:\code\xxx\trunk\xxx\xxx\obj\x64\Release\xxx.dll /proxytypes /reference: ..\common\xxx\build\winx64\lib\xxx.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll /reference:C:\Windows\Microsoft.NET \Framework\v2.0.50727\System.Configuration.Install.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\ Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\ Framework\v2.0.50727\System.EnterpriseServices.dll /reference:C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.Runtime.Serialization.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\ System.ServiceModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll" /reference:C:\Windows\Microsoft.NET\ Framework\v2.0.50727\System.Web.Services.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll/参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll/参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll
何か案は?
visual-studio-2010 - SGen への呼び出しを開始する MSBuild タスクはどれですか?
複数のソリューションをビルドおよび展開する複雑な MSBuild スクリプトを継承しました。スクリプトを実行すると、ログに次のエラーが表示されます。
SGEN: 既に存在するため、シリアル化アセンブリ C:\B\268\Agents\Agents.XmlSerializers.dll を生成できません。/force を使用して、既存のアセンブリを強制的に上書きします。
存在することに同意しAgents.XmlSerializers.dll
ます。私が判断できないのは、どのタスクがそれを作成したのか、どのタスクが再作成の試みを開始したのかです。
ビルド階層で「SGen」のファイルを検索しましたが、何も見つかりませんでした。したがって、SGen はビルド内の 2 つ (またはそれ以上) のタスクによって暗黙的に呼び出されると思います。
SGenと呼ばれるものを誰か指摘できますか?
ありがとう。
.net - sgen.exe ビルド エラー "要求された型の 1 つ以上を読み込めません"
複数のソリューションを含むソリューションを構築しています。それらの 1 つを除くすべてが問題なくビルドされます。問題のあるものは、次のメッセージを出力します。
エラー 2 要求されたタイプの 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。J:\MyPlugins\MyPlugin1\SGEN MyPlugin1
Visual Studio で詳細出力をオンにすると、次のようになりました: C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sgen.exe /assembly:
FusionLog で出力を確認したところ、すべてが正しく読み込まれました。これは赤ニシンであることが判明しました。冗長性を上げてビルドを再度実行することにしました。私は以下を得ました:
Microsoft (R) Xml Serialization サポート ユーティリティ [Microsoft (R) .NET Framework、バージョン 4.0.30319.17929] Copyright (C) Microsoft Corporation. 全著作権所有。さらにヘルプが必要な場合は、「sgen /?」と入力してください。SGEN : エラー : 要求された型の 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。コマンドはコード 1 で終了しました。タスク「SGen」の実行が完了しました -- 失敗しました。
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sgen.exe /assembly:":\MyPlugins\MyPlugin1.dll" /proxytypes /reference:"J:\MyPlugins\ MyPlugin1\packages\FluentValidation.3.4.6.0\lib\Net40\FluentValidation.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll" /reference :"J:\MyPlugins\MyPlugin1\Libraries\Core\bin\Release\Core.dll" /reference:"J:\MyPlugins\MyPlugin1\Libraries\Services\bin\Release\Services.dll" /reference:"J: \MyPlugins\MyPlugin1\Presentation\Web.Framework\bin\Release\Web.Framework.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Core .dll" /参照:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4. 0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.EnterpriseServices.dll" /reference:"C:\Program Files (x86) \Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.dll" /reference:"C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web. Mvc.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.Services.dll" /reference:"C:\Program Files (x86) \Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Xml.dll"
このエラーの原因は何ですか?また、SGEN をオフにする以外に修正するにはどうすればよいですか? 参考までに、私はコードを書きませんでした。
c# - dot.net Framework 4.0/2用のWindowsSDK7.1のインストールに関する問題1つの問題
昨日から、Windows 7x64マシンにdot.netFramework4.0用のWindowsSDK7.1をインストールしようとしています。インストール中に毎回同じエラーが発生します。
エラーメッセージ:
それはかなり役に立たないエラーメッセージなので、私は詳細についてwwwを閲覧し、人々が推奨する推奨手順を実行しました。ビューログを開いたところ、他の人と同じようにエラーが返されました。
Microsoft、MSDNなどが推奨するものをすべて試しましたが、何も機能しません。
私が問題を解決しようとしたもの:
- ドキュメントエクスプローラーの削除(msdnが推奨)
- 最新のMicrosoftVisualC ++ 2010 Redist x64 / x86バージョンの削除(microsoft)
- Microsoft Windows SDK Windows 7(dot.net 3.5)の削除
- Microsoft WindowsSDK8のインストール
しかし、私が言ったように、何も役に立ちません:/インストール中に毎回同じエラーメッセージが表示されます。
私のシステムに関するその他の事実:
- システムにMicrosoftVisualC ++2008Redistのバージョンがたくさんあります
- Microsoft VisualC++コンパイラ2008StandardEdition enu x64 / x86
- VisualStudio2008用のMicrosoftWindowsSDK
背景情報:
Jenkinsをサービスとして自分のマシンのWindows7x64にインストールしました。dot.netFramework3.5からdot.netFramework4.0に切り替えました。しかし、問題はsgen.exeがエラーを送信することでした:
"SGEN : error : An attempt was made to load an assembly with an incorrect format.."
(ビルドログで見つけるため)。「C:\ ProgramFiles \ Microsofft SDKs \ Windows \ v7.0\Bin」などのbinフォルダーにsgen.exeを含むWindowsSDK。そのため、SDKは古い(v7.0a)と思い、dot.netFramework4.0用のWindowsSDKv7.1をインストールしようとしました。最新のVisualStudioバージョンをシステムにインストールすると、Windows SDKが同時にインストールされるため、問題の解決に役立つ場合があります。
ただし、このコンピューターで作業する人がいないため、ライセンスの浪費を防ぐためにVisualStudioをインストールしたくありません。