问题标签 [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.

0 投票
2 回答
1459 浏览

asp.net - 无法调试通过自定义 VirtualPathProvider 加载的 EmbeddedResource 视图

我编写了一个自定义的 VirtualPathProvider(来源此处),它将从 EmbeddedResources 返回内容,或者如果已被告知在哪里可以找到它,则从原始文件返回内容(这允许您编辑和更新文件而无需重建)。到目前为止,这工作正常。

不工作的是调试。如果我在视图中添加断点,它不会加载符号。我知道为什么这很困难(ASP 编译器如何知道源文件在哪里,以便发现断点?),但我正在寻找一种方法来提示编译器在哪里可以找到源文件。

此处的示例项目:http: //dl.dropbox.com/u/2808109/VppDebugTest.zip

编辑:

我一直在试验通过 VPP 加载的 ASPX 页面,并通过查看编译源(使用David Ebbo 的技术),生成的行 pragma 如下所示:

通常,这些是沿线生成的

不知道对大家有没有帮助...

编辑2:

在大卫把他的代码发给我之后,我做了一些进一步的调查,以下事情似乎是真的:

  1. 除非引用 system.web(在 VS 2010 中),否则您不能在 .aspx 中设置断点
  2. 如果您使用指令创建一个最小的 .aspx 页面<%@ Page Language="C#" %>并设置断点,VS 将在源文件中的断点处停止

  3. 如果您使用指令创建非最小 .aspx<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="VppDebugTest.WebForm1" %>并设置断点,则查看时 VS 将带您进入 dissasembly 调试视图

--- 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:如果我在我的 Index.cshtml 中调用 Debugger.Break(),调试器会在反汇编视图中停止,并且根本没有编译指示,不正确或其他

  1. 如果我在我的视图中手动写入@{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" },则调试将停止在文件中。所以也许解决方案是让我的 VPP 将#line pragma 插入 cshtml 文件本身?
0 投票
2 回答
1069 浏览

.net - 使用自定义 VirtualPathProvider 加载继承自定义 WebViewPage 的嵌入视图

此问题类似,我正在使用自定义 VirtualPathProvider 来检索嵌入在 dll 中的视图。如果我不@inherits System.Web.Mvc.WebViewPage发表观点,我会收到此错误:

我正在使用从 WebViewPage 继承的自定义 BaseViewPage。在我开始使用这个自定义 VirtualPathProvider 之前,在 web.config 中设置新的基本页面是可行的。现在,如果我尝试在页面上继承我的自定义类,@inherits My.BaseViewPage我会得到与上面相同的错误。

为了完整起见,我将补充说,如果我从 WebViewPage 继承,页面确实开始编译,但它会引发错误,因为有代码期望视图具有来自 BaseViewPage 的属性。

0 投票
0 回答
1353 浏览

c# - VirtualPathProvider 性能

我目前正在尝试创建一个类库并将 MVC 视图嵌入其中,以便我们可以在多个站点之间共享它,如下所述:http ://www.wynia.org/wordpress/2008/12/aspnet-mvc-plugins /

性能很重要,所以我试图弄清楚这是否是要走的路。如果可能的话,有人可以简要解释一下 VirtualPathProvider 吗?

我注意到这个方法只为每个文件调用一次。

VirtualPathProvider 是否自动缓存文件/视图?在另一篇文章(解释同样的事情)中,他们说您应该覆盖 GetCacheDependency:

那么这里返回null不会影响VirtualFile的“缓存”吗?我问这个的原因是因为我们创建的 VirtualFile 的自定义实现,称为 EmbeddedVirtualFile,在覆盖的 Open() 方法中使用了这段代码:

我有点担心这会对性能产生影响。有人可以安慰我吗?

0 投票
2 回答
4589 浏览

c# - 获取 FileInfo 文件的绝对服务器路径(物理路径)

我正在使用 EPi 服务器提供商:

以下是提供者的定义:

我的问题来了——如果我定义一个字符串,例如:

FileInfo将无法找到此文件,因为它使用的是虚拟路径而不是物理路径。

如何获取物理路径,以便我能够找到带有 的文件FileInfo

0 投票
1 回答
814 浏览

asp.net - 在 asp.net webforms 中实现多 web 项目结构

我正在一个具有多个业务领域的 Web 应用程序中工作。随着时间的推移,它的大小已成为开发和维护的问题。我想根据具有要共享的公共文件(母版页、资源、Css 等)的主根 Web 项目将 Web 项目分成几个子项目或库,理想情况下我希望有某种注入允许我有选择地发布该“组件”或简单地发布自定义变体,尽管它的配置取决于部署后的数据库设置。

我搜索了整个网络,阅读了与多个项目、依赖注入和复合应用程序相关的所有页面,直到我软化了我的头脑,但找不到任何真正有用的东西。理论方法或单元测试应用程序的主要部分(嗯,你不能制作你想要的应用程序,但你仍然可以对其他东西进行单元测试)其他方法在 VS2010 .Net 4.0 中根本不起作用

有人可以就完整的解决方案或示例向我介绍吗?或者干脆让我们讨论。

我们说该解决方案具有以下结构,其中模块内容已经分为目录:

解决方案

Warehouse and Sales 包含与“模块”相关的页面

谢谢,


我发布了我在该主题上的进展。

根据 Steven 的建议,我使用 MEF 进行了更多实验。由于缺乏文档,特别是对于 web 表单,这是一个痛苦的*。到目前为止,我设法在我的解决方案中实现了 MEF,并成功地插入了一个对主应用程序可见的插件项目。

然后通过具有插件名称、默认页面 url 及其顺序的界面加载可用插件,选择所有这些数据并呈现菜单选项卡。那部分很容易。

单击菜单元素必须重定向到插件的主页,这将为其包含的页面呈现几个菜单(来自另一个导出界面)

我终于在插件项目中嵌入了一个 aspx 页面作为资源。我目前陷入困境的地方。

¿ 有没有办法使用 MEF 将嵌入的页面作为资源嵌入到库中,或者我也被迫使用 VirtualPathProvider?¿ 重定向到该页面的语句具体如何?我尝试了几种方法,但没有一种方法有效(MEF 和 VirtualPathProvider)

我查看了无数关于它的文章,但它们都以控制渲染结束,而不是页面。太令人沮丧了。

0 投票
1 回答
699 浏览

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,我已经决定将其用于 IOC!

Griffin.MvcContrib - 插件系统

0 投票
0 回答
500 浏览

asp.net-mvc-3 - ASP.NET MVC 3 使用插件/嵌入式视图时找不到 _viewstart.cshtml

我正在尝试使用嵌入视图的 ASP.NET MVC 3 (razor) 插件机制,如此所述,我将视图引擎更改为从 RazorViewEngine 继承,但除此之外并没有真正改变任何东西。现在我在插件程序集中调用一个控制器操作,它呈现一个视图,这工作正常。但是视图找不到_viewstart.cshtml,因此没有布局。理想情况下,我想让主机应用程序定义 viewstart 和布局。可能我不应该直接调用插件控制器操作,而是只渲染插件的部分内容,让主机应用程序处理主控制器/视图。

这些是在我自己的 VirtualPathProvider 中尝试的 viewstart 位置:

我也在考虑忘记嵌入视图,因为它看起来有点繁琐,所以我可能会选择将视图复制到主机应用程序,这可以让未来用户更容易调试。风险在于用户会对这些视图进行更改,从而使插件的更新更加困难。我对插件机制产生怀疑的原因之一是可能会影响性能,尽管我还没有进行任何测量。

0 投票
0 回答
803 浏览

c# - VirtualPathProvider 不解析剃刀标记

如本文所述,我正在使用 VirtualPathProvider 从数据库中加载剃刀视图

问题是当视图加载时,没有解析 Razor 标记。它正在页面上完全像这样呈现"@inherits System.Web.Mvc.WebViewPage hello world

对于这个例子,我已经硬编码了方法返回的字符串GetContent()

这是我的代码:

0 投票
0 回答
48 浏览

javascript - 使用其他项目的 Javascript 库

我有两个网站,其中一个网站有一些我想在第二个网站上使用的脚本,我不想将 .js 文件复制到其他项目,因为如果我对 .js 文件进行了一些更改我将不得不做同样的事情两次。

我不知道该怎么做,我已经阅读了有关 Virtual Path Provider 的内容,但它显然对我不起作用,.js 文件位于子文件夹中,VPP 找不到它。

有人可以给我关于我应该做什么的想法吗?

0 投票
2 回答
1014 浏览

asp.net-mvc-3 - asp.net mvc 虚拟视图和 web 配置

有很多例子展示了如何从文件或数据库中存储和检索虚拟视图,但没有一个例子展示了如何配置 root web.config 以便应用程序正常工作,当视图的内容从文件中检索并包含例如@ViewBag.Title = "Some Title"线。

在这种情况下,我得到CS0103: The name 'ViewBag' does not exist in the current context错误,就像我从 ~/Views 项目文件夹中删除 web.config 的情况一样。

那么,为了修复上述错误,从 ~/Views/web.config 到 root web.config 的哪些配置元素?

是否可以在运行时将配置元素加载到程序集中?