問題タブ [virtualpathprovider]
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 - カスタム VirtualPathProvider を介してロードされた EmbeddedResource ビューをデバッグできません
EmbeddedResources からコンテンツを返すカスタム VirtualPathProvider (ソースはこちら) を作成しました。または、元のファイルの場所が指定されている場合は元のファイルから返します (これにより、再構築することなくファイルを編集および更新できます)。これまでのところ、これはうまく機能しています。
機能していないのはデバッグです。ビューにブレークポイントを追加すると、シンボルが読み込まれません。これが難しい理由はわかります (ブレークポイントを見つけるために、ASP コンパイラはソース ファイルの場所をどのように知ることができますか?)、ソース ファイルがどこにあるかをコンパイラに示す方法を探しています。
サンプル プロジェクトはこちら: http://dl.dropbox.com/u/2808109/VppDebugTest.zip
編集:
私は VPP 経由で読み込まれた ASPX ページで実験を行っており、( David Ebbo の手法を使用して) コンパイル済みソースを表示することで、行プラグマは次のように生成されます。
通常、これらは次の行に沿って生成されます。
それが誰かに役立つかどうかはわかりません...
編集2:
デビッドがコードを送ってくれた後、さらに調査を行ったところ、次のことが正しいようです。
- system.web が参照されていない限り、.aspx にブレークポイントを設定することはできません (VS 2010 で)
ディレクティブを使用して最小限の .aspx ページを作成し
<%@ Page Language="C#" %>
、ブレークポイントを設定すると、VS はソース ファイルのブレークポイントで停止します。ディレクティブを使用して最小ではない .aspx を作成し
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="VppDebugTest.WebForm1" %>
、ブレークポイントを設定すると、VS を表示すると逆アセンブリ デバッグ ビューが表示されます。
--- http://server/WebForm1.aspx ------------------------------------------------
0000003a mov ecx,dword ptr [ebp-3Ch]
0000003d call 63EC54F0
00000042 mov dword ptr [ebp-44h],eax
00000045 mov edx,dword ptr ds:[03E62200h]
0000004b mov ecx,dword ptr [ebp-44h]
Razor ビューのブレークポイントで停止することはありません。残念ながら、これは本当に必要なことです。この .aspx はニシンかもしれません。
編集:
5: Debugger.Break() への呼び出しを Index.cshtml に入れると、デバッガーは逆アセンブル ビューで停止し、正しくないかどうかにかかわらず、プラグマがまったくありません。
- ビューに手動で書き込む
@{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" }
と、デバッグされたファイルが停止します。たぶん解決策は、VPP が #line プラグマを cshtml ファイル自体に挿入することでしょうか??
.net - カスタム VirtualPathProvider を使用して、カスタム WebViewPage を継承する埋め込みビューをロードする
この質問と同様に、カスタム VirtualPathProvider を使用して、dll に埋め込まれたビューを取得しています。ビューを配置しない@inherits System.Web.Mvc.WebViewPage
と、次のエラーが発生します。
WebViewPage から継承するカスタム BaseViewPage を使用しています。このカスタム VirtualPathProvider を使い始める前は、web.config で新しい基本ページを設定していました。ここで、ページでカスタム クラスを継承しようとすると、@inherits My.BaseViewPage
上記と同じエラーが発生します。
完全を期すために、WebViewPage から継承するとページのコンパイルが開始されることを追加しますが、ビューが BaseViewPage からのプロパティを持つことを期待するコードがあるため、エラーがスローされます。
c# - VirtualPathProvider のパフォーマンス
私は現在、クラス ライブラリを作成し、MVC ビューを埋め込んで、ここで説明されているように複数のサイトで共有できるようにしようとしています: http://www.wynia.org/wordpress/2008/12/aspnet-mvc-plugins /
パフォーマンスは重要なので、これが進むべきかどうかを理解しようとしています。可能であれば、VirtualPathProvider について簡単に説明してもらえますか?
このメソッドは、ファイルごとに 1 回だけ呼び出されることに気付きました。
VirtualPathProvider はファイル/ビューを自動的にキャッシュしますか? 別の記事 (同じことを説明している) では、GetCacheDependency をオーバーライドする必要があると述べています。
ここで null を返しても、VirtualFile の「キャッシュ」には影響しませんか? 私がこれを尋ねている理由は、EmbeddedVirtualFile と呼ばれる、作成した VirtualFile のカスタム実装が、オーバーライドされた Open() メソッドでこのコードを使用するためです。
これによりパフォーマンスが低下するのではないかと心配しています。誰かが私を安心させることができますか?
c# - FileInfo のファイルの絶対サーバー パス (物理パス) を取得します。
EPi サーバー プロバイダーを使用しています。
プロバイダーの定義は次のとおりです。
そして、ここに私の問題があります-たとえば、次のように文字列を定義すると:
FileInfo
physicalPath ではなく virtualPath を使用しているため、このファイルを見つけることができません。
でファイルを見つけることができるように、physicalPath を取得するにはどうすればよいFileInfo
ですか?
asp.net - asp.net webforms で複数の web プロジェクト構造を実装する
私は、いくつかのビジネス分野の Web アプリケーションで作業しています。時間の経過とともに、そのサイズは開発と維持の問題になりました。共有する共通ファイル (マスターページ、リソース、Css など) を持つメイン ルート Web プロジェクトに応じて、Web プロジェクトをいくつかのサブプロジェクトまたはライブラリに分割したいと考えています。オプションでその「コンポーネント」を公開するか、カスタマイズされたバリエーションを単に公開できるようにするインジェクションですが、その構成は DB セットアップのデプロイ後に依存します。
Web 中を検索し、複数のプロジェクト、依存性注入、複合アプリに関連するすべてのページを読んで、頭が柔らかくなるまで調べましたが、本当に役立つものは見つかりませんでした。理論的なアプローチまたはアプリケーションの単体テストに関する記述の大部分 (まあ、目的のアプリを作成することはできませんが、他の何かを単体テストすることはできます) 他のアプローチは、VS2010 .Net 4.0 では機能しません。
誰かが完全なソリューションまたは例で私に対処できますか? または、単に議論しましょう。
ソリューションには次の構造があり、モジュールの内容は既にディレクトリに分割されていると言います。
解決
倉庫と販売は「モジュール」に関連するページが含まれています
ありがとう、
進行状況を件名に投稿します。
Steven の提案に従って、MEF を使用してさらに実験を行いました。ドキュメントが不足しているため、特に Web フォームに関しては、これが苦痛でした*。これまでのところ、ソリューションに MEF を実装することができ、メイン アプリに表示されるプラグイン プロジェクトを正常に挿入できました。
次に、プラグイン名、デフォルトのページ URL、およびその順序を持つインターフェースを介して、使用可能なプラグインをロードし、このすべてのデータを選択してメニュー タブをレンダリングします。その部分は簡単です。
メニュー要素をクリックすると、プラグインのメイン ページにリダイレクトする必要があります。これにより、含まれているページのいくつかのメニューが (別のエクスポート インターフェイスから) レンダリングされます。
最後に、プラグイン プロジェクトにリソースとして埋め込まれた aspx ページを取得しました。現在行き詰まっているところ。
MEF を使用してライブラリにリソースとして埋め込まれたページをレンダリングする方法はありますか、それとも VirtualPathProvider も使用する必要がありますか? そのページにリダイレクトするステートメントは具体的にどのようになっていますか? いくつかの方法を試しましたが、誰も機能しません (MEF および VirtualPathProvider)
私はそれについて話している無数の記事を見ましたが、それらはすべてページではなくコントロールのレンダリングを行っています。とてもイライラします。
asp.net-mvc-3 - 他のプロジェクトからの非埋め込みビューの読み込み
モジュールをサポートする必要がある mvc3 プロジェクトに取り組んでいます。たとえば、MVC3 コア プロジェクトと MVC3 モジュール プロジェクト (MyModule) があります。
ここで、コア プロジェクトの MVC3 モジュール プロジェクトからビューを読み込んで表示したいと考えています。カスタムの VirtualPathProvider クラスと、コア プロジェクト以外の場所からビューをフェッチする VirtualFile クラスを作成しました。
どういうわけか、次のエラーが表示されます。CS0103: The name 'ViewBag' does not exist in the current context.
私がやっていることは、コア プロジェクトの AssemblyInfo クラスで次のコード行を使用して、コア プロジェクトのモジュール プロジェクトからアセンブリをロードすることです。
ModuleLoader クラスは DLL をフェッチしBuildManager.AddReferencedAssembly
、アセンブリを追加するために使用します。
に移動して、MyModuleController.cs のアクション メソッドを呼び出すことができるようになりましたhttp://localhost/MyModule
。MyModuleController.cs の Index ActionResult メソッドで、次のようなビューを返します。
VirtualPathProvider は、パスが ~/Modules/ で始まるかどうかを確認し、モジュール プロジェクトからビュー (MyModule -> Views -> Index.cshtml) を取得します。
今、エラーを検索し、欠落している Web.config ファイルについて読みましたが、完全な MVC3 Web プロジェクトであるため、モジュール プロジェクトにすべてが含まれています。
アセンブリからの埋め込みビューの読み込みについてよく読みましたが、上記で説明したことは可能ですか?
前もって感謝します!
編集:
Griffin-MvcContrib 方式を採用し、そのプラグイン システムを使用することにしました。これは、私が必要とするすべてのものを提供しているように見えます。さらに、Autofac を使用しています。
asp.net-mvc-3 - プラグイン/埋め込みビューを使用している場合、ASP.NET MVC 3 _viewstart.cshtml が見つかりません
ここで説明されているように、埋め込みビューを使用して ASP.NET MVC 3 (カミソリ) のプラグイン メカニズムを試しています。ビュー エンジンを RazorViewEngine から継承するように変更しましたが、それ以外は実際には何も変更しませんでした。今、ビューをレンダリングするプラグイン アセンブリでコントローラー アクションを呼び出していますが、これは問題なく動作します。しかし、ビューは _viewstart.cshtml を見つけることができないため、レイアウトがありません。理想的には、ホスト アプリケーションにビュースタートとレイアウトを定義させたいと思います。おそらく、プラグイン コントローラー アクションを直接呼び出すのではなく、プラグインからパーシャルのみをレンダリングし、ホスト アプリケーションにメインのコントローラー/ビューを処理させるべきです。
これらは、私自身の VirtualPathProvider で試したビュースタートの場所です:
また、ビューの埋め込みは少し面倒に思えるので忘れることも考えています。そのため、ビューをホスト アプリケーションにコピーすることを選択することも考えられます。これにより、将来のユーザーがデバッグしやすくなる可能性があります。ユーザーがこれらのビューを変更し、プラグインの更新が難しくなるリスクがあります。プラグインのメカニズムに疑問を抱く理由の 1 つは、パフォーマンスに影響する可能性があるためです。ただし、まだ測定は行っていません。
c# - VirtualPathProvider がかみそりのマークアップを解析していない
この記事で説明されているように、VirtualPathProvider を使用してデータベースから Razor ビューをロードしています。
問題は、ビューが読み込まれるときに、Razor マークアップが解析されていないことです。これはまさにこのようにページにレンダリングされています"@inherits System.Web.Mvc.WebViewPage hello world
」
この例では、GetContent()
メソッドによって返される文字列をハードコーディングしました。
これが私のコードです:
javascript - 他のプロジェクトの Javascript ライブラリを使用する
2 つの Web サイトがあり、そのうちの 1 つで、2 番目の Web サイトで使用したいスクリプトがいくつかあります。.js ファイルに変更があった場合、.js ファイルを他のプロジェクトにコピーしたくありません。同じことを2回しなければなりません。
どうすればよいかわかりません。仮想パスプロバイダーについてはすでに読んだことがありますが、明らかにうまく機能しません。.jsファイルはサブフォルダーにあり、VPPは見つかりませんそれ。
誰かが私が何をすべきかについて私にアイデアを与えることができますか?
asp.net-mvc-3 - asp.netmvc仮想ビューとWeb構成
ファイルまたはデータベースから仮想ビューを保存および取得する方法を示す例はたくさんありますが、ビューのコンテンツがファイルから取得され、たとえば、@ViewBag.Title = "Some Title"
行。
この場合、 CS0103が表示されます。〜/ Viewsプロジェクトフォルダーからweb.configを削除した場合と同様に、現在のコンテキストエラーには「ViewBag」という名前は存在しません。
では、上記のエラーを修正するために、〜/ Views /web.configからrootweb.configまでの構成要素は何ですか?
実行時に構成要素をアセンブリにロードすることは可能ですか?