在多个项目之间共享aspx页面

11
我们有一个涉及多个Web项目的解决方案,其中一些页面应该出现在其中几个项目中。因此,我们需要一种共享项目的方式,其中包含aspx文件,并且可以被其他Web项目引用。
目前有一些实现方法: ScottGu描述的一种方法是构建共享项目,然后将输出的aspx复制到主机项目中,并引用aspx的dll。这种方法的缺点是如果aspx被修改,必须重新复制。
另一种基于David Ebbo的文章的选择是将aspx转换为可以作为自定义控件引用的ascx,然后将这些自定义控件-aspx包含在占位符页面中的主机项目中。但我的担忧是:所有aspx页面都可以转换为ascx吗?我的意思是例如用户控件中没有Page.LoadComplete事件。
另一种选择是使用虚拟目录映射到共享的 Web 项目,正如 Microsoft 的 KB article 中所述。但是,这种方法的问题在于共享的 aspx 文件必须位于预定义的目录中(即虚拟目录)。如果虚拟目录的名称与物理目录重叠,则虚拟目录将覆盖它,并且不能使用后者中的任何页面。也许可以将这两个方法合并吗?
有什么想法吗?提前致谢 附:如何调试共享页面?
4个回答

4

而且使用UserControls时,无需复制它们(请参见问题中的第二段提案)。感谢您的回答。 - jaraics
现在我只是在 PreBuild 事件中复制这些 dll,这不是什么大问题。我应该看看 David Ebbo 的帖子。谢谢你的提示。 - azhons

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

0
你有没有考虑将功能作为基类放入继承自Page的类中,并将这些类放入共享DLL中。所有实现应用程序都可以通过继承该页面来实现它,同时仍然能够更改功能,假设基类提供了可重写方法。当我有很多页面在许多应用程序中使用且所有页面都具有相同的代码时,我使用这种方法取得了不错的成功。这只是一种可能性。

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

0

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

跳出(.Net框架)的限制


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接