11

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

现在有一些实现:

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

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

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

有什么想法吗?在此先感谢 PS如何调试共享页面?

4

4 回答 4

4

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

于 2011-04-07T07:32:17.813 回答
1

我们使用的解决方案是ScottGu 的方法,它涉及将 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
于 2011-04-07T07:07:06.377 回答
0

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

于 2011-03-24T15:10:52.523 回答
0

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

跳出(.Net 框)思考

于 2011-03-25T16:26:43.757 回答