我有一个Web应用程序,其中包含三个其他Web应用程序共享的用户控件和资源.
Solution | +-CommonControlsWebApp | +- resources | | +- images | | +- scripts | | +- stylesheets | +- UserControls | +-WebApp1 | +-WebApp2 | +-WebApp3
这就是我现在所知道的:
我无法将CommonControlsWebApp编译成一个dll,因为我正在创建用户控件.这只能使用自定义服务器控件,其中所有内容都在代码隐藏文件中.所以我需要一种在四个项目之间共享ascx文件的方式.
>将CommonControlsWebApp中的文件复制到另外三个项目中,不会在解决方案资源管理器中更新其文件.当在CommonControls中添加或重命名文件时,我将不得不在所有三个WebApps中“添加项目”.
>更改为网站模型将会弥补这一点,但是如果我这样做,我担心WebApp1-3的编译时间.
>“添加为链接”不适用于目录.
>我可以使用Subversion来共享项目之间的文件,但我相信,如果我正在开发一个用户控件,我必须通过一个WebApps进行测试,这将需要一直检查文件.
ASP.NET没有一个很好的解决方案吗?你们如何组织大型Web应用程序?
编辑:非常感谢所有的答案.现在我将使用构建事件复制我的用户控件,然后查看是否有时间将其重构为服务器控件.
解决方法
是WebApplication,而不是网站.然后,您将使用文件夹的名称来帮助将其标识为与各个Web应用程序不同的常见文件夹. (CommonUserControls而不仅仅是UserControls)
在其他Web应用程序中,您可以为CommonUserControls等创建一个虚拟目录,并为CommonControlsWebApp.dll添加基于文件的引用
这要求您使用IIS进行开发(而不是casini),Visual Studio不会相信控件真的存在,但它将在运行时工作,只需对blahblah.ascx或blahblah.master的警告进行构建即可.路径无效.
如果您使用常用的母版页和Visual Studio 2008,您将需要SP1 for 2008,并在各个Web项目的根目录中使用__fallback.master进入设计模式.
但是,我在另一个线程上看到了这一点,我将会进一步研究如下:
http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx