我们的产品是ASP.Net Web应用程序。目前,我们在Visual Studio中使用Web站点项目,但一直在研究使用Web应用程序项目。我目前正在研究它们,以便我们有希望改进我们的部署过程。
我们有一个在不同客户端之间共享和通用的基本网站,然后我们在客户端网站项目中使用特定于客户端的功能扩展它。客户端项目扩展基础,因此依赖于其内容。要构建完整的产品,我们首先部署基础网站,然后将其与客户端项目中的内容重叠。
在Visual Studio中转换为Web应用程序项目时,我们希望能够创建基础项目,然后创建客户端项目并设置对base的引用。这种结构似乎工作正常,但是当我们尝试使用MSDeploy从客户端项目部署应用程序时,只发布基本网站的dll。这对某些事情来说很好,引用编译的代码很有用,但还有其他项目,如images,js pages,htm等,它们仍然是客户端应用程序运行所必需的源代码。我们需要的不仅仅是来自我们基础网站的编译代码。
尽管如此,我可以在这里想到几个选择:
我缺少一个不同的选择吗?我在设置项目的方式上做错了吗?除了共享编译代码之外,是否还有更多使Web应用程序引用另一个Web应用程序?如果是这种情况,为什么不只是使用共享类库?或者我可能错过了MS Deploy流程的一些内容?
我对这里的建议持开放态度,因为我觉得我错过了一些东西。我不认为我们的Web应用程序模型太独特了。
更新:双部署过程确实有效,但感觉有点笨拙。还有其他什么输入吗?
答案 0 :(得分:1)
通过使用程序集WebResource,您可以添加CSS / JS /其他一些文件作为参考以及代码,即您的基础项目DLL。
如果我是对的,您可以在基础项目中添加此WebResource,然后浏览以下链接。
http://support.microsoft.com/kb/910442
就像这样,大多数第三方工具都会访问他们的CSS和JS文件。
试试这个。希望它会有所帮助。
答案 1 :(得分:0)
网站如何在客户之间“共享”?每个客户端最终是否获得了不同的站点(IP地址等),或者他们是否登录到同一站点但获得了不同的功能?您可能希望将所有功能添加到单个项目中,然后通过设置启用/禁用功能。
答案 2 :(得分:0)
如果我正确理解了您的问题,您还要发布未编译的项目(htm,JS,图像等)。
因此,解决方案资源管理器选项卡中的每个文件都有自己的属性(通过F4键访问),您可以选择构建操作(例如,编译 - >将在DLL中注入项目,如果适用,内容 - >将文件“原样”复制到输出目录。)
我认为构建操作“内容”,选项“复制到输出目录”设置为“复制如果更新”,可能是您正在寻找的解决方案。
答案 3 :(得分:0)
我会仔细分析您在项目之间共享的内容以及您如何共享它们。
如果它是编译代码,正确的方法是将这些类提取到自己的命名空间和程序集中,并跨项目共享DLL。确保在重构时遵循OO和SOLID原则。
如果是您分享的内容(js,htm,images,css),您可以在此处选择一些选项。您可以为内容创建单独的虚拟目录,并使用绝对URL引用您的内容。这有助于因为如果您想要将项目分离到IIS中的自己的网站,您可以在以后的行中进行操作,而不必更改内容URL。您还可以在所谓的基本网站中获取所有内容,然后使用相对于基本网站的相对路径引用其他项目中的内容。
另一方面,如果您要共享ASP.NET用户控件或ASP.NET MVC视图,则最好在每个项目中创建单个项目。这并不一定意味着该路径中存在单独的物理文件 - 您还可以在Visual Studio中的.NET项目中添加仅作为引用链接的项目。
关于部署过程,我认为网站项目本身没有任何问题。 Web站点项目的目的与Web应用程序项目不同,主要是您不必在每次部署代码时编译类(只要它们位于正确的应用程序文件夹中)。 我建议坚持使用网站项目的两步部署过程。
我还会查看在IIS中创建的网站(虚拟目录),如果有意义,可以考虑嵌套它们。对应用程序池(无论是单独的还是共享的)的审查也不会造成损害。
最后,这是一个老问题。如果您已经实施了成功的策略,请分享。