11

我们的产品是一个 ASP.Net Web 应用程序。目前,我们在 Visual Studio 中使用网站项目,但很长一段时间以来一直在研究使用 Web 应用程序项目。我目前正在研究它们,以便我们有望改进我们的部署过程。

我们有一个在不同客户之间共享和通用的基础网站,然后我们在客户网站项目中使用特定于客户的功能对其进行扩展。客户项目扩展了基础,因此依赖于其内容。为了构建完整的产品,我们首先部署基础网站,然后将其与来自客户端项目的内容叠加。

在查看在 Visual Studio 中转换为 Web 应用程序项目时,我们希望能够创建基础项目,然后创建客户端项目并设置对基础的引用。这种结构似乎工作正常,但是当我们尝试使用 MSDeploy 从客户端项目部署应用程序时,只会发布来自基本网站的 dll。这对于某些事情来说很好,引用已编译的代码很有用,但还有其他项目,如图像、js 页面、htm 等,仍然是客户端应用程序运行所需的源。我们需要的不仅仅是来自我们基础网站的编译代码。

说了这么多,我可以在这里想到几个选项:

  1. 继续分两步部署。首先是基础网站,然后是构建完整产品的客户端网站。
  2. 修改部署流程,从基础项目复制所需的源文件
  3. 重新构建我们的模型,以不同的方式支持这种基础-客户关系。不太确定这将如何工作,并且将是最不可行的选择。
  4. ??

我错过了其他选择吗?我设置项目的方式有问题吗?除了共享编译代码之外,让一个 Web 应用程序引用另一个 Web 应用程序还有更多的方法吗?如果是这样,你为什么不直接使用共享类库呢?或者也许我在 MS Deploy 过程中遗漏了一些东西?

我对这里的建议持开放态度,因为我觉得我错过了一些东西。我不认为我们的网络应用模型太独特了。

更新:双重部署过程确实有效,但感觉有点笨拙。还有其他输入吗?

4

4 回答 4

1

通过使用程序集 WebResource,您可以添加 CSS/JS/其他文件作为参考以及代码,即您的基础项目 DLL。

如果是正确的,您可以在您的基础项目中添加此 WebResource,然后通过以下链接。

http://support.microsoft.com/kb/910442

像这样,大多数第三方工具都会访问他们的 CSS 和 JS 文件。

尝试这个。希望它会有所帮助。

于 2013-01-31T07:24:36.627 回答
0

我会仔细分析您在项目之间共享的内容以及您如何共享它们。

如果是编译代码,正确的方法是将这些类提取到它们自己的命名空间和程序集中,并跨项目共享 DLL。确保在重构​​时遵循 OO 和 SOLID 原则。

如果您共享的是内容(js、htm、图像、css),您可以在这里选择一些。您可以为内容创建一个单独的虚拟目录,并使用绝对 URL 引用您的内容。这很有帮助,因为以后如果您想在 IIS 中将项目分离到其自己的网站中,则不必更改内容 URL。您还可以拥有所谓的基础网站中的所有内容,然后使用相对于基础网站的相对路径引用其他项目中的内容。

另一方面,如果您想共享 ASP.NET 用户控件或 ASP.NET MVC 视图,最好在每个项目中创建一个单独的项目。这并不一定意味着该路径中有单独的物理文件 - 您还可以在 Visual Studio 的 .NET 项目中添加仅作为参考链接的项目。

关于部署过程,我认为网站项目本身没有任何问题。网站项目的目的与 Web 应用程序项目不同,主要是您不必在每次部署代码时都编译类(前提是它们位于正确的应用程序文件夹中)。我建议坚持使用网站项目的两步部署过程。

我还将查看在 IIS 中创建的网站(虚拟目录),如果有意义的话,我会考虑将它们嵌套。并且审查应用程序池(无论是单独的还是共享的)也不会造成损害。

最后,这是一个老问题。如果您已经实施了成功的策略,请分享。

于 2013-01-30T04:17:47.380 回答
0

网站如何在客户之间“共享”?每个客户最终会获得不同的站点(IP 地址等),还是他们登录到同一个站点但获得不同的功能?您可能希望考虑将所有功能添加到单个项目中,然后通过设置启用/禁用功能。

于 2012-03-21T17:22:30.643 回答
0

如果我正确理解了您的问题,您还想发布未编译的项目(htm、JS、图像等)。

因此,解决方案资源管理器选项卡中的每个文件都有自己的属性(通过 F4 键访问),可让您选择构建操作(例如,编译 -> 如果适用,将在 DLL 中注入项目,内容 -> 将复制文件“按原样”输出目录)。

我认为构建操作“内容”,选项“复制到输出目录”设置为“如果更新则复制”,可能是您正在寻找的解决方案。

于 2012-11-12T20:05:15.247 回答