我们有一个包含多个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事件。例如。
另一种选择是使用映射到共享webproject的虚拟目录,如Microsoft KB article中所述。此方法的问题是共享的aspx-es必须位于预定义的目录(即虚拟目录)中。 如果虚拟目录的名称与物理目录重叠,则虚拟目录会覆盖它,并且不能使用后者的页面。 是否有可能将这两者合并在一起?
有什么想法?提前致谢 附:调试共享页面怎么样?
答案 0 :(得分:4)
我通过创建包含.ascx控件的共享类库来解决此问题。从.aspx页面转换为.ascx控件时没有发现真正的困难。通过ScottGu找到这个样本真的很简单,也是开始的好地方。 http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx
答案 1 :(得分:1)
我们使用的解决方案是ScottGu's method,它涉及将aspx文件从共享项目复制到主机项目。
共享项目中的post build事件将文件复制到它们的位置,如此
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
答案 2 :(得分:0)
您是否考虑过将该功能基类化为从Page继承的类,并将这些类放在共享DLL中。然后,所有实现应用程序都可以通过继承它来实现该页面,并且仍然能够在假定基类提供可覆盖方法的情况下更改功能。当我在许多应用程序中使用了很多页面并且所有页面都具有相同的代码时,我已经取得了相当不错的成功。只是一种可能性。
答案 3 :(得分:0)
您是否考虑过面向服务的开发?将功能构建到您可以共享的服务中。像小部件一样构建您的功能。这样,您只有一个代码库,但您可以在多个站点中使用它。
在(.Net框)之外思考