Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Web应用程序结构和部署_Asp.net_Web Applications_Deployment_Msdeploy_Web Application Project - Fatal编程技术网

Asp.net Web应用程序结构和部署

Asp.net Web应用程序结构和部署,asp.net,web-applications,deployment,msdeploy,web-application-project,Asp.net,Web Applications,Deployment,Msdeploy,Web Application Project,我们的产品是一个ASP.NETWeb应用程序。目前,我们在VisualStudio中使用Web站点项目,但已经研究使用Web应用程序项目有相当一段时间了。我目前正在研究它们,以便我们有希望改进我们的部署过程 我们有一个在不同客户机之间共享的基础web站点,然后在客户机web站点项目中使用特定于客户机的功能来扩展它。客户项目扩展了基础,因此依赖于其内容。为了构建完整的产品,我们首先部署基础网站,然后将其与客户机项目中的内容覆盖在一起 在VisualStudio中转换为Web应用程序项目时,我们希望

我们的产品是一个ASP.NETWeb应用程序。目前,我们在VisualStudio中使用Web站点项目,但已经研究使用Web应用程序项目有相当一段时间了。我目前正在研究它们,以便我们有希望改进我们的部署过程

我们有一个在不同客户机之间共享的基础web站点,然后在客户机web站点项目中使用特定于客户机的功能来扩展它。客户项目扩展了基础,因此依赖于其内容。为了构建完整的产品,我们首先部署基础网站,然后将其与客户机项目中的内容覆盖在一起

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

综上所述,我可以在这里想出几个选择:

  • 分两步继续部署。首先是基础网站,然后是客户端网站,以构建完整的产品
  • 修改部署过程以从基础项目复制所需的源文件
  • 重新构建我们的模型,以不同的方式支持这种基本客户关系。我不太清楚这将如何运作,这将是最不可行的选择
  • ?
  • 有没有我错过的其他选择?我的项目设置方式是否有问题?除了共享编译后的代码外,让一个Web应用程序引用另一个Web应用程序是否还有其他方法?如果是这样,为什么不使用共享类库呢?或者我在MS部署过程中遗漏了什么

    我愿意接受这里的建议,因为我觉得我错过了一些东西。我不认为我们的web应用程序模型太独特


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

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

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

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


    我认为构建操作“content”,选项“copy to output directory”设置为“copy if newer”,可能是您正在寻找的解决方案。

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

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

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

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

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

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


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

    通过使用assembly WebResource,您可以添加CSS/JS/其他一些文件作为参考,以及代码,即您的基本项目DLL

    如果我是对的,你可以在你的基础项目中添加这个WebResource,然后通过下面的链接

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


    试试这个。希望能有所帮助。

    顺便说一句,是的,你的型号与众不同。但无论如何都要远离网站“项目”。它们是独一无二的,而且不是一种好的方式。是的,我们知道网站项目是。。嗯,在很多方面都很特别。只是有时候很难修复没有损坏的东西。是什么让我们的结构如此独特?另一个可行的选择是让每个项目都包含应用程序的完整源代码,并设置某种源代码分支。不过我们以前也这么做过