問題タブ [side-by-side]
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.
asp.net - 従来の ASP.NET から MVC 2 (RC) への移行: HttpApplication イベントが発生しない、ユーザー プリンシパルが null
問題
既存の ASP.NET Web アプリケーションを取得し、手動で移行して MVC 2 を使用しようとしています (現在 RC を実行しています)。私はいくつかの手順に従いました(すぐにリストします)、動作しているように見えましたがAuthorizeAttribute
、コントローラーで User が null であるため、設定できないことに気付きました。次に、アクションに移動したときに、HttpApplication の通常のライフサイクル イベント (BeginRequest など) が発生していないことに気付きました。これはおそらく User プリンシパルが null である理由に関連していると思います。Web ホストはローカルの IIS7 インスタンスです (Vista ワークステーション上)。
移行中に参照として使用する新しい MVC 2 Web アプリケーションを作成しました。それは問題なく動作し、アプリケーション イベントを発生させ、期待どおりに User プリンシパルを設定します。
自分を罰したい場合は、以下の詳細をお読みください (私の能力の及ぶ範囲で)。
移行手順
- アプリケーション ディレクトリのアプリケーション プールが .NET 2.0 で統合されていることを確認します。
- Web プロジェクトで System.Web.Abstractions (v.3.5.0.0)、System.Web.routing (v3.5.0.0)、および System.Web.Mvc (v2.0.0.0) を参照しました。ここで、System.Web.Mvc をローカル参照として追加して、統合と展開を容易にしました。
- csproj を変更して、MVC VS アドインの良さを有効にしました (この記事を参照してください) 。
- プロジェクトに Controllers および Views ディレクトリを追加し、サンプル MVC アプリケーションの /Views/web.config に追加しました。
- web.config を変更しました (注:モジュールとハンドラーに他のがらくたがありますが、単純さとセキュリティのために隠しました... しかし、それらは問題の一部である可能性が非常に高いです):
compilation
セクション: _
pages
セクション: _
system.webServer/modules
セクション(IIS7が統合されていることを思い出してください) :
system.webServer/handlers
セクション: _
ルートを登録するように global.asax を更新し、レガシーのものに干渉するものを無視します。
/li>
追加情報
また、Autofac の最新リリース バージョン (v1.4.5.676) を使用し、その Web 統合ハンドラーを利用しています。すべてのオートファクトを完全に削除/無効にし、すべてを希望どおりに設定して、両方の方法を確認しました。どちらにしても問題には影響しません。
私はまた、私の特別な超甘い IgnoreRoute 設定の有無にかかわらず、これを試しました。無効。
また、ルートが機能しているように見えることを明確にしたいと思います。コントローラーとアクションに適切に送信されます。HttpContext.Current.User に Null プリンシパルがあり、アプリケーションのライフサイクルがまったく発生しないようです。イベント。現在のプリンシパルを取得したり、厄介な承認を行ったりする必要がなければ、何かが間違っていることに気付くことはなかったでしょう ;)
はい、通常の ASPX ページは正しく機能し、アプリケーション ライフサイクル イベントは正常に発生します。
私が作成した簡単なテスト コントローラーの例を次に示します。
次の例外が発生します。
これは最悪です:(。私の短編小説を読んでくれてありがとう。
com - アウト プロセス ActiveX の SideBySide のシミュレーション
クライアント側の比較的複雑なアプリケーション (ActiveX / .net / Delphi / C++ / COM) を適応させて、SxS を使用して、管理者以外の展開と製品の古いバージョンからの分離を実現しています。
プロセスで使用するすべてのライブラリを記述したマニフェスト ファイルを作成することで、.net ui、Delphi ui、およびプロセスで使用する COM サーバーなど、ほぼすべてのプロセス内コンポーネントでこの目標を達成できました。登録は必要ありません。いずれかのコンポーネントのクライアントで (ほぼ)。
そして、大部分がここに来ます: 現時点では、私たちのアプリケーションは (C++ の部分から) プロセス外 ActiveX サーバー (Delphi ActiveX EXE) を呼び出し、それ自体がプロセス外 ActiveX サーバーの別のセット (サードパーティのプラグイン、ここには、Delphi、C++、ActiveX EXE プロセス外であり、インターフェイスを実装している限り、すべてのものがあります)。
私たちが知っているように、SxS はアウト プロセス ActiveX サーバーをサポートしていません。また、これらのオブジェクトをメイン プロセスの proc com サーバーのように使用することはできません。これは、アプリケーションを大幅に書き直す必要があり、最悪の場合、サード パーティのツールやベンダーによって使用される公開 API を壊す必要があるためです。許せないブレイク。
別のプロセスで実行されている Internet Explorer ウィンドウから IHTMLDocument2 を抽出する方法について説明しているこの記事に出くわしました。このアプローチを思いついた理由は次のとおりです。
ActiveX をイン プロセス サーバーとして実行するセカンダリ サテライト アプリケーション/プロセスを作成します。次に、 LresultFromObjectとObjectFromLresultを使用して、ActiveX オブジェクトの参照をサテライト アプリケーションからメイン アプリケーション プロセスに転送します。サテライト アプリケーションには、SxS モードで実行できる独自のマニフェスト ファイルがあります。
この Delphi ActiveX EXE とサード パーティの AciveX EXE プラグインとの間の通信には、同じアプローチが取られます。
com リクエストを .net に変換することにより、.net リモーティングと .net com プロキシ クラスを使用して 2 つのプロセス間の通信チャネルを開くという上記の提案されたソリューションよりも、当面は好まない代替ソリューションがあります。 2 番目のプロセスで com に戻ります。
だからここに質問があります:
- このアプローチについてどう思いますか?
- 問題のより良い解決策はありますか?
msvcrt - プライベート アンマネージド サイド バイ サイド アセンブリの問題
多数の DLL を使用する大規模な MFC アプリケーションがあります。ここまでは、vcredist_x86.exe を使用して、MFC と CRT をアンマネージ サイド バイ サイド アセンブリ キャッシュ (C:\Windows\WinSxS) にインストールしてきました。この方法で MFC/CRT をインストールすると、アプリケーションが (クリーンな XP マシンで) 実行されます。
MSDN のドキュメントによると、アプリケーションがインストールされているフォルダーにアセンブリ ファイルをコピーすることで、MFC/CRT をインストールできます。これを単純な MFC アプリケーションでテストしたところ、動作しました。しかし、このアプローチを使用して大規模な MFC アプリケーションを動作させるには問題があります。
この問題は、一部の DLL に以前のバージョンの CRT を参照するマニフェストが含まれていることが原因であると思われます。たとえば、ある DLL には次のマニフェストが含まれています。
CRT アセンブリのバージョン 8.0.50727.762 をアプリケーションのフォルダーにコピーしています。ご覧のとおり、これは CRT の新しいバージョンです。しかし、何らかの理由で、OS ローダーが上記のマニフェストで DLL をロードできません。同じ CRT アセンブリが WinSxS にインストールされている場合、これは発生しません。DependencyWalker を使用して読み込みをトレースすると、エラー LDR: LdrpWalkImportDescriptor() failed to probe c:\documents and settings\qatest\desktop\test\log4cpp.dll for its manifest, ntstatus 0xc0150002 が表示されます
アセンブリの新しいバージョンをロードするローダーの機能は、プライベート サイド バイ サイド アセンブリを使用している場合は機能しないようですが、アセンブリが WinSxS にインストールされている場合は機能します。
これに対する解決策はありますか?
c++ - マニフェストがC++プログラム用にどのように生成されているかについての洞察が必要
作成した実行可能ファイルを実行すると、次のエラーが発生します。
指定されたプログラムを実行できません
私がすぐに考えたのは、VC8.0の再配布可能なDLL(msvcr80d.dll
et al。)の1つとの依存関係の問題であるということでした。プログラムに影響を与えるこれらのDLLのパッチが適用されたバージョンでいくつかの問題が発生しました。
Dependency Walkerで実行可能ファイルを開くと、次のエラーが表示されます。
実行可能ファイルのマニフェストファイルを開くと、次のファイルが含まれています。
Microsoft.VC80.DebugCRT
依存アセンブリのコピーが2つあるようです。
アセンブリの8.0.50727.4053
バージョンがサイドバイサイド構成にありません(このバージョンには、インストールされていないVisual Studioパッチが付属していると思います)。
このアセンブリをマニフェストファイルから削除すると、実行可能ファイルは正常に実行されます。
ただし、アプリケーションを再構築すると、マニフェストが再生成され、追加の依存関係が再度追加されます。
この依存関係がマニフェストに追加される原因は何ですか?別のDLLと関係があると思いますが、私のアプリケーションは、別の再配布可能なDLLのセットを使用して別のPCでビルドする必要がありますが、これを確認したいと思います。
アップデート:
私はこのブログ投稿で多くの提案を試しましたが、幸運はありませんでした。奇妙なことの1つは、リリースビルドを実行したときに生成されるマニフェストに8.0.50727.4053エントリが含まれていないのに、デバッグビルドには含まれていることです。
windows - Python またはその他の一般的なスクリプト言語/ツールを使用して、DLL マニフェスト情報をプログラムで取得する
私はこのような問題を抱えています:
http://svn.haxx.se/tsvnusers/archive-2008-07/1051.shtml
アプリが私たちのものであることを除いて(申し訳ありませんが、機密情報は提供しません). ただし、SideBySide に欠陥があるのは私たちのせいではありません。
とにかく、バージョン X は機能し、バージョン Y は最初から爆発します。私は、違いが何であるかを理解するために、多数のディレクトリと最大 100 個の dll ファイルを調べる作業に直面しています。
別の dll ファイルの 2 つの異なるバージョンをロードする 2 つの dll ファイル間に競合があるようです。
特定のファイルからマニフェストを抽出するための Python/その他のスニペットについてご協力いただければ幸いです。ありがとう!
編集:ところで、私は方法を見つけました: 次のコマンドを実行できます (mt.exe は Visual Studio 2008 Tools の一部です):mt.exe -inputresource:MyFile.dll;#2 -out:MyFile.dll.extracted_manifest.txt
.
これは良いスタートですが、2 つの問題があります。
- 複数のマニフェストが埋め込まれている可能性があります (私の理解では): #1、#2、#3、... - どのマニフェストがどれだけ前もってわかりません。最大値はいくらですか?
- 推測して、そのパラメーターを指定して mt.exe を実行すると、エラーが発生します。これらのエラーを処理すると、スクリプトが長くなります。
誰かがこれに光を当てることができますか?
別の編集:ああ、気にしないでください!1 は .exe 用、2 は dll 用で、それだけです。私は今何をすべきかを知っていると思います。ただし、私のソリューションよりも優れたソリューションがある場合、または Python やその他のスクリプトから mt.exe への呼び出しを自動化している場合は、自由に共有してください。
visual-studio - xsvcr90.dllがFlsAllocを読み込もうとすることによる問題の展開
XPで起動したくないWindows7x64上のVS2008SP1a(9.0.30729.4148)でビルドされたアプリケーションがあります。
メッセージはThe application failed to initialize properly (0x80000003). Click on OK to terminate the application.
です。確認したところ、KERNEL32.dllからロードしようとしてdepends.exe
いることがわかりました。FlsAllocはVista以降でのみ使用できます。アプリケーションでは使用されていないと思います。msvcr90.dll
FlsAlloc
問題を解決する方法は?
SxSパッケージはすでにターゲットマシンにインストールされています-実際、私は9.0 SxSの3つのバージョンすべてを持っています(初期リリース、sp1、およびsp1 +セキュリティパッチ)
アプリケーションはでコンパイルされます_BIND_TO_CURRENT_VCLIBS_VERSION=1
また、私は正しいターゲットWindowsバージョンを定義しましたstdafx.h
マニフェストファイル
依存からの結果
アドレス0x00400000で「c:\ programfiles \ app \ app.EXE」(プロセス0xA0)を開始しました。モジュールを正常にフックしました。アドレス0x7C900000に「c:\ windows \ system32\NTDLL.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7C800000に「c:\ windows \ system32\KERNEL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x785E0000に「c:\ programfiles \ app\MFC90.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x78520000に「c:\ programfiles \ app\MSVCR90.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7E410000に「c:\ windows \ system32\USER32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77F10000に「c:\ windows \ system32\GDI32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77F60000に「c:\ windows \ system32\SHLWAPI.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77DD0000に「c:\ windows \ system32\ADVAPI32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77E70000に「c:\ windows \ system32\RPCRT4.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77FE0000に「c:\ windows \ system32\SECUR32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77C10000に「c:\ windows \ system32\MSVCRT.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x5D090000に「c:\ windows \ system32\COMCTL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x76380000に「c:\ windows \ system32\MSIMG32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7C9C0000に「c:\ windows \ system32\SHELL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77120000に「c:\ windows \ system32\OLEAUT32.DLL」をロードしました。モジュールを正常にフックしました。ロードされた"c:
Windows SDK 7がインストールされ、デフォルトのSDKとして構成されていることを述べておく必要があります。
visual-studio-2008 - Visual Studio 2008 で mt.exe にマニフェスト ファイルを正しく埋め込むことはできますか?
mt.exe
VCPROJ 内で実行すると、マニフェスト ファイルを正しく作成して実行可能ファイルに埋め込むことができないことがわかりました。
たとえば、同じ実行可能ファイルは Windows 7 ではうまくロードされますが、Windows XP ではロードできませんでした。マニフェストは埋め込まれ、正しいものでした。
失敗する場所は次のcrtlib.c
とおりです。
これにより、 http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/2d6af19a-6ead-4c00-a896-871a28c5f7f1に送られました
考えられる理由と解決策を探すのに何時間も費やしました。プロジェクト設定を変更して、exe ファイルの外部にマニフェストを生成しました。現在、両方のシステムで動作します。
デバッグ ビルドの例を次に示します。
埋め込みを無効にした場合:
これは埋め込みを有効にしたものです:
それらを比較すると、2番目のものは共通のコントロールを追加します(どこからかわかりません)。また、requestedExecutionLevelタグの構文との小さな違いです。
問題は、mt.exe にマニフェストを正しく埋め込むことができるかどうか、およびその方法です。
.net - アプリケーションで「useLegacyV2RuntimeActivationPolicy」と supportedRuntime を使用する際の問題
次のように、いくつかの異なるアプリケーションの .config ファイルを変更しました。
devenv.exe.config (VS 2005 - 聞かないでください :)) に対してこれを行ったとき、うまく機能しました - ほとんどの Visual Studio は .NET 2.0 を使用していましたが、.NET 4.0 フレームワークをターゲットとするアセンブリを利用することができました.
カスタム .exe に対して同じことを試みました。これはたまたま MS CAB に基づいており (わずかに変更されています)、WPF と WinForms コンテンツのハイブリッド ミックスを持っています。このアプリケーションのアプリ構成ファイルを変更するとすぐに、アプリケーションの起動中に次の例外が発生し始めました。
元に戻す操作で、対応するセット操作で適用されたものとは異なるコンテキストが検出されました。考えられる原因は、コンテキストがスレッドで設定され、元に戻されていない (元に戻されていない) ことです。System.InvalidOperationException: Undo 操作で、対応する Set 操作で適用されたものとは異なるコンテキストが検出されました。考えられる原因は、コンテキストがスレッドで設定され、元に戻されていない (元に戻されていない) ことです。
アプリケーション コードに直接何も表示されない、非常に長いスタック トレースがあります (多数の MS アセンブリのみ)。
アプリケーションの .config ファイルを次のように変更すると:
つまり、supportedRuntime 要素を削除すると、アプリケーションはこの例外をスローしません。しかし、コード内で .NET 4 アセンブリを読み込もうとすると、次のように失敗した場合:
System.BadImageFormatException: ファイルまたはアセンブリ '' またはその依存関係の 1 つを読み込めませんでした。このアセンブリは、現在読み込まれているランタイムよりも新しいランタイムによってビルドされているため、読み込むことができません。
これは期待できると思います。
2 つの質問があります。
1) このアプリケーションの構成ファイルを変更して supportedRuntime 要素を含め、.NET 4 サポートを追加し、それについて何ができるかについての提案を追加すると、System.InvalidOperationException 例外が発生する理由はわかりますか?
2)答えが「理由がわからない/それについて何ができるかわからない」である場合、.NET 3.5 SP1コード(C#)は、条件付きで.NET 4ランタイムサポートを追加するためのよりきめ細かいサポートを提供できますアプリケーション全体をターゲット .NET 4 に変換せずに、または宣言的な構成ファイルのアプローチを使用せずに、特定のアセンブリに対して? ある時点で、アプリケーション全体を .NET 4 をターゲットとするように変換しますが、短期的にはこれは困難な作業であり、短期的なソリューション/ハックを期待しています。
どんなアドバイスでも構いませんのでよろしくお願いします!
.net - 新しいアプリ ドメインで別の .NET ランタイム バージョンを対象とするアセンブリを読み込むことはできますか?
.NET 2 ランタイムに基づくアプリケーションがあります。.NET 4 のサポートを少し追加したいのですが、(短期的には) アプリケーション全体 (非常に大きい) をターゲット .NET 4 に変換したくありません。
私は、アプリケーションの.configファイルを作成する「明白な」アプローチを試みました.
しかし、ここで指摘したいくつかの問題に遭遇しました。
別のアプリ ドメインを作成するというアイデアが浮かびました。それをテストするために、.NET 2 をターゲットとする WinForm プロジェクトを作成しました。次に、.NET 4 をターゲットとするクラス ライブラリを作成しました。WinForm プロジェクトに、次のコードを追加しました。
私の DotNet4AppDomain.exe.config ファイルは次のようになります。
残念ながら、これは dotNet4AppDomain.Load が実行されると BadImageFormatException をスローします。コードで何か間違ったことをしているのですか、それとも私がやろうとしていることがうまくいかないのですか?
ありがとうございました!
.net - .NET4を使用したWindowsLiveWriterプラグイン
.NET4に対して実行されるWindowsLiveWriterのプラグインを作成した人はいますか?.NET 4ではサイドバイサイド実行が導入されているため、アプリの一部は.NET xをターゲットにでき、別の部分は.NET4をターゲットにできます。
以前は.NET2までのプラグインしかサポートしていなかったため、WLWはこれを試すための良い出発点になると思いました。しかし、私の.NET4プラグインは表示されません。
たぶん彼らはプラグインをロードする前に依存関係をテストしますか?
他の誰かがこれを機能させましたか?