这个问题是我关于在Web应用程序之间共享资源的问题的后续问题,因为我还没有找到一个好的解决方案.
我有一个Web应用程序,其中包含由其他三个Web应用程序共享的用户控件和资源.
Solution | +-CommonControlsWebApp | +- resources | | +- images | | +- scripts | | +- stylesheets | +- UserControls | +-WebApp1 | +-WebApp2 | +-WebApp3
这就是我所知道的:
因为我正在创建用户控件,所以我无法将CommonControlsWebApp编译成单个dll.这仅适用于自定义服务器控件,其中所有内容都位于代码隐藏文件中.所以我需要一种方法来共享四个项目之间的ascx文件.
将CommonControlsWebApp中的文件复制到其他三个项目中不会更新解决方案资源管理器中的文件.在CommonControls中添加或重命名文件时,我必须在所有三个WebApp中"添加exting items".
更改为Web站点模型可以解决这个问题,但是如果我这样做,我担心WebApp1-3的编译时间.
"添加为链接"不适用于目录.
我可以使用Subversion在项目之间共享文件,但我相信如果我正在开发一个我必须通过其中一个WebApp测试的用户控件,这将要求我一直检查文件.
ASP.NET真的没有一个很好的解决方案吗?你们是如何组织大型网络应用程序的?
编辑:非常感谢所有答案.我现在要用构建事件复制我的用户控件,然后看看我们是否有时间将它们重构为服务器控件.
我们现在公司的做法是确保CommonControlsWebApp是一个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