【问题标题】:Share aspx page between projects在项目之间共享 aspx 页面
【发布时间】:2011-07-22 04:12:13
【问题描述】:

我们有一个包含多个 Web 项目的解决方案,其中一些页面应该出现在其中的几个项目中。所以我们需要某种包含 aspx 文件的共享项目,并且可以被其他 Web 项目引用。

现在有一些实现:

一个实现described by ScottGu 涉及构建共享项目,然后将输出 aspx 复制到宿主项目中,并引用 aspx 的 dll。此方法的缺点是,如果 apsx 被修改,则必须重新复制。

基于David Ebbo's post 的另一种选择是将aspx 转换为可以作为自定义控件引用的ascx-es,然后将这些custom-control-aspx-es 包含在某些占位符页面内的宿主项目中。但我担心的是:所有 apsx 页面都可以转换成 ascx 吗?例如,我的意思是用户控件中没有 Page.LoadComplete 事件。

另一种选择是使用映射到共享 web 项目的虚拟目录,如 Microsoft KB article 中所述。此方法的问题再次是共享的 aspx-es 必须位于预定义的目录(即虚拟目录)中。 如果虚拟目录的名称与物理目录重叠,则虚拟会覆盖它,并且不能使用来自后者的页面。 是否可以将这两者合并在一起?

有什么想法吗?提前致谢 附言调试共享页面怎么样?

【问题讨论】:

    标签: asp.net asp.net-ajax reference share web-deployment


    【解决方案1】:

    我通过制作包含 .ascx 控件的共享类库解决了这个问题。从 .aspx 页面转换为 .ascx 控件时没有发现真正的困难。发现 ScottGu 的这个示例非常简单,也是一个很好的起点。 http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx.

    【讨论】:

    • 并且使用 UserControls 无需复制它们(请参阅问题中的第 2 段提案)。感谢您的回答。
    • 现在我只是在 PreBuild 事件中复制这些 dll,这不是什么大问题。我应该看看 David Ebbo 的帖子。感谢您的提示。
    【解决方案2】:

    我们使用的解决方案是ScottGu's method,这涉及将aspx文件从共享项目复制到宿主项目。

    共享项目中的构建后事件将文件复制到它们的位置,如下所示

    xcopy "$(ProjectDir)Forms\Techs\AddEditTech.aspx" "$(SolutionDir)..\TTAdmin\Forms\Companies"  /i /d /y
    if errorlevel 1 goto BuildEventFailed
    
    xcopy    ....
    
    goto BuildEventOK
    
    :BuildEventFailed
    echo POSTBUILDSTEP for $(ProjectName) FAILED
    exit 1
    
    :BuildEventOK
    echo POSTBUILDSTEP for $(ProjectName) COMPLETED OK
    

    【讨论】:

      【解决方案3】:

      您是否考虑过将功能基类化为从 Page 继承的类,并将这些类放在共享 DLL 中。然后,所有实现应用程序都可以通过继承该页面来实现该页面,并且仍然能够更改功能,假设基类提供了可覆盖的方法。当我有很多页面在许多应用程序中使用并且都具有相同的代码时,我在这方面取得了相当大的成功。只是一种可能。

      【讨论】:

      • 好点,但我有一些关于 aspx-es 的内容(控件和静态内容)。有没有一种简单的方法可以将该内容编译到 dll 中?我试图将完整的页面(标记+代码)编译到 dll 中(通过预编译它)并从该类继承,但是出现运行时错误,“尝试加载字符串资源时发生错误”这让我认为页面试图从 dll 中加载标记作为资源。
      • 应该能够通过将所有控件的构建属性设置为嵌入资源来将内容编译到dll中。您可能必须通过查询程序集的资源从代码中加载控件,但它应该可以解决。
      【解决方案4】:

      您是否考虑过面向服务的开发?将功能构建到您可以共享的服务中。构建您的功能,如小部件。这样,您只有一个代码库,但您可以在多个站点中使用它。

      跳出(.Net 框)思考

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 2018-05-27
        • 1970-01-01
        相关资源
        最近更新 更多