⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deployment.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
字号:
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>部署 ASP.NET 应用程序</h4>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#fslayout">ASP.NET 应用程序的文件系统布局</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#resolvingassemblies">解析对程序集的类引用</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#startup">ASP.NET 框架应用程序启动和类解析</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#codereplacement">代码替换</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#summary">本节小结</a><br>
</div>


<p>
<hr>



<!--BEGIN SUB SECTION--> <a name="fslayout"><span class="subhead">ASP.NET 应用程序的文件系统布局</span>
<p>
ASP.NET 可以用来承载多个 Web 应用程序,其中每个应用程序由 Web 站点(Web 站点在 Web 服务器上表现为一个唯一的<b>主机名</b>/<b>端口</b>组合)内的一个唯一的 URL 前缀来标识。例如,一个具有两个映射 IP 地址(一个别名为“www.msn.com”,另一个别名为“intranet”)和三个逻辑站点(http://intranet、http://www.msn.com 和 http://www.msn.com port 81)的 Microsoft Internet Information 服务 (IIS) Web 服务器可以公开以下六个 ASP.NET 应用程序。
<p>
<div class="indent">
<table class="table2" cellpadding="3" width="450">
<tr>  <th>应用程序 URL</th>
        <th>说明</th></tr>
<tr>  <td>http://intranet</td>
        <td>Intranet 站点上的“根”应用程序。</td></tr>
<tr>  <td>http://www.msn.com</td>
        <td>www.msn.com 站点上的“根”应用程序。</td></tr>
<tr>  <td>http://www.msn.com:81</td>
        <td>www.msn.com 81端口站点上的“根”应用程序。</td></tr>
<tr>  <td>http://intranet/training</td>
        <td>Intranet 站点上的“培训”应用程序。</td></tr>
<tr>  <td>http://intranet/hr</td>
        <td>Intranet 站点上的“HR”(人力资源)应用程序。</td></tr>
<tr>  <td>http://intranet/hr/compensation/</td>
        <td>Intranet 站点上的“薪酬”应用程序。</td></tr>
</table>
</div>
<p>

<b>注意:</b>表中提到的薪酬应用程序的 URL 以 HR 应用程序的 URL 命名空间为基础。但是,此 URL 分级表示法并不意味着薪酬应用程序包含或嵌套在 HR 应用程序中。相反,每个应用程序都保持一个独立的配置和类解析属性集;两个都是 Intranet 站点的逻辑对等子站点。

<p>
在 URL 命名空间中公开的每个 ASP.NET 框架应用程序都通过位于本地或远程文件共享的文件系统目录得到支持。不要求应用程序目录集中位于文件系统的相邻部分;它们可以分散在整个磁盘中。例如,前面提到的 ASP.NET 应用程序可以位于下表所列的不同目录中。
<p>

<div class="indent">
<table class="table2" cellpadding="3" width="450">
<tr>  <th>应用程序 URL</th>
      <th>物理路径</th></tr>
<tr>  <td>http://intranet</td>
      <td>c:\inetpub\wwwroot</td></tr>
<tr>  <td>http://www.msn.com</td>
      <td>c:\inetpub\msnroot</td></tr>
<tr>  <td>http://www.msn.com:81</td>
      <td>d:\msnroot81</td></tr>
<tr>  <td>http://intranet/training</td>
      <td>d:\serverapps\trainingapp</td></tr>
<tr>  <td>http://intranet/hr</td>
      <td>\\hrweb\sillystuff\reviews</td></tr>
<tr>  <td>http://intranet/hr/compensation/</td>
      <td>c:\inetpub\wwwroot\compensation</td></tr>
</table>
</div>



<!--BEGIN SUB SECTION--> <br> <a name="resolvingassemblies"><br> <span class="subhead">解析对程序集的类引用</span>
<p>
程序集是公共语言运行库中的类部署单元。使用 Visual Studio .NET 7.0 版编写 .NET 框架类的开发人员将为他们编译的每个 Visual Studio 项目生成一个新的程序集。尽管使程序集跨越多个可移植可执行 (PE) 文件(几个模块 DLL)是可行的,但默认情况下,Visual Studio .NET 将所有程序集代码编译成一个 DLL(1 个 Visual Studio .NET 项目 = 1 个 .NET 框架程序集 = 1 个物理 DLL)。

<p>
在计算机上,可以通过将程序集部署到程序集缓存中来使用程序集。程序集缓存可以或者对计算机是全局的,或者对特定应用程序是本地的。只有要在多个应用程序间共享的代码才应该放在全局系统程序集缓存中。特定于具体某个应用程序的代码(如大多数 Web 应用程序逻辑)应该部署到应用程序的本地程序集缓存中。将程序集部署到应用程序的本地程序集缓存中的一个好处是,只有该应用程序内的代码才可以访问它。(对涉及 ISP 的情况而言,这是一个好特性。)它还有利于同一应用程序的并排版本控制,因为类对于每个应用程序版本实例是专用的。
<p>
只需将适当的文件复制、XCOPY 或 FTP 到已被标记为应用程序的“程序集缓存位置”的目录,就可以将程序集部署到此应用程序的本地程序集缓存中。复制了适当的文件后不必运行其他注册工具,也不需要重新启动。这消除了目前与在 ASP 应用程序中部署 COM 组件有关的一些困难(目前,管理员必须从本地登录到 Web 服务器并且运行 Regsvr32.exe)。
<p>
默认情况下,ASP.NET 框架应用程序被自动配置为将紧接应用程序根下的 \bin 子目录用作其本地程序集缓存。\bin 目录还被配置成拒绝任何浏览器访问,从而使远程客户端无法下载和窃取代码。下面的示例显示了 ASP.NET 应用程序的一种可能的目录布局,其中 \bin 目录紧接在应用程序根下。

<div class="code"><xmp>
C:\inetpub\wwwroot
   Web.cfg
   Default.aspx

   \bin                  <= Application assembly cache directory
      MyPages.dll
      MyBizLogic.dll

   \order
      SubmitOrder.aspx
      OrderFailed.aspx

      \img
         HappyFace.gif
</xmp></div>


<!--BEGIN SUB SECTION--> <a name="startup"><span class="subhead">ASP.NET 框架应用程序启动和类解析</span>
<p>
ASP.NET 框架应用程序是在客户端第一次向其请求 URL 资源时才构造的。每个 ASP.NET 框架应用程序都在一个唯一的应用程序域 (<b>AppDomain</b>)内启动&mdash;&mdash;此域是一种新的公共语言运行库构造,它使进程主机能够在运行时提供广泛的代码、安全性和配置隔离。
<p>
ASP.NET 负责在新应用程序启动时手动创建应用程序域。作为此过程的一部分,ASP.NET 提供供公共语言运行库使用的配置设置。这些设置包括:
<ul>
<li>组成本地程序集缓存的目录路径。(注意:是 .NET 框架应用程序域隔离结构使每个应用程序得以保持各自的本地程序集缓存。)
<li>应用程序的安全限制(应用程序在系统上可以访问的内容)。
</ul>
<p>

由于 ASP.NET 在编译时不知道您在其上所写的任何应用程序,所以它无法使用静态引用来解析和引用应用程序代码。相反,ASP.NET 必须使用动态类/程序集解析方法来实现从 ASP.NET 运行库到应用程序代码的转换。
<p>
ASP.NET 配置和页激活文件使您能够通过指定程序集和类名组合,动态引用目标编译的 .NET 框架类。该联合的字符串格式遵从此模式
<div class="code">classname, assemblyname</div>于是,公共语言运行库可以使用此简单的字符串引用来解析和加载适当的类。



<!--BEGIN SUB SECTION--> <br> <a name="codereplacement"><br> <span class="subhead">代码替换</span>
<p>
.NET 框架程序集通常编译和部署成基于 Windows DLL 的 PE 格式。当公共语言运行库的加载程序解析在此类型的程序集中实现的类时,它调用文件(锁定它在磁盘上的访问)上的 Windows LoadLibrary 例程,然后将适当的代码数据映射到内存中以在运行时执行。加载后,DLL 文件在磁盘上保持锁定,直到引用它的应用程序域被销毁或者被手动回收。

<p>
尽管 ASP.NET 无法防止公共语言运行库在磁盘上锁定加载的程序集 DLL,但它仍能提供支持,确保 Web 应用程序专用程序集缓存中的物理 DLL 永远不被运行库实际加载。相反,在程序集 DLL 即将使用之前会对它们进行影像复制。因此,运行库锁定和加载的是这些影像程序集,而不是原始文件。

<p>
由于原始程序集文件总是保持不锁定,所以可以任意删除、替换或重命名它们,而不必循环 Web 服务器或不得不使用注册实用工具。FTP 和类似的方法同样有效。ASP.NET 维护在特定应用程序的应用程序域中加载的所有程序集的活动列表,并使用文件更改监视代码监视原始文件的任何更新。



<h4><a name="summary">本节小结</a></h4>
<ol>
<li>ASP.NET 框架应用程序由唯一的 URL 标识并存在于 Web 服务器的文件系统中。
<li>ASP.NET 可以使用共享程序集(驻留在全局缓存中)和应用程序特定的程序集(驻留在应用程序的虚拟根目录下的 \bin 目录中)。
<li>ASP.NET 框架应用程序在应用程序域 (AppDomain) 的上下文中运行,此域提供隔离并且强制安全限制。
<li>可以通过使用“classname, assemblyname”动态引用类。
<li>ASP.NET 使用程序集文件的影像副本以避免锁定,并且监视这些文件以便立即获得更新。
</ol>
<p>


<!-- #include virtual="/quickstart/include/footer.inc" -->


<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -