【问题标题】:.Net Web Application and compile/deployment.Net Web 应用程序和编译/部署
【发布时间】:2011-01-24 19:45:05
【问题描述】:

我接手了一个引用 dll 的 Web 应用程序项目。该解决方案具有实际项目以及用于创建 DLL 的类库。我需要对 Web 应用程序进行更改并部署到生产环境。我习惯于部署 asp.net 网站以及非常简单的经典 asp,只需复制文件即可。

我需要帮助来了解编译和部署过程。这里有一些问题: 1)类库(DLL)改变;我是否只编译该类库项目并仅移动 Dll。 2)Web应用项目改变,dll保持不变;我要移动什么文件。

另外,如果有人可以澄清部署时如何处理 DLL 版本。我已经习惯了注销/注册 DLL 的旧方法,但现在情况并非如此。我担心在同一个盒子上有多个 DLL 副本。

任何帮助或阅读参考将不胜感激。

贾马尔

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    当您以这种方式手动部署时,很容易出错(忘记复制相关文件)。我以前也遇到过这种情况。

    我建议您使用 Visual Studio 中的发布功能。 您可以右键单击 Web 应用程序,然后从上下文菜单中选择“发布”。我通常发布到本地文件夹(您可以直接发布到服务器),然后使用 FileZilla 等 FTP 客户端进行实际部署(我在直接从 Visual Studio 部署时遇到了一些问题)。

    当您使用 FileZilla 上传时,您可以指定您希望如何处理现有文件覆盖。 我使用选项:“如果源文件更新,则覆盖”。这样部署速度快(仅部署已更改的文件)且安全,因为我们不会错过任何文件。

    回答您的问题: 1)是的,部署类库就足够了,但前提是它与旧的保持二进制兼容(这里容易出错)。 2) 您需要部署更改的文件(dll、aspx、cshtml 等...)。如果类库 dll 没有改变,则不需要重新部署它们。

    按照上面的步骤,你应该没问题。

    【讨论】:

    • 注意:如果您执行“如果源文件较新则覆盖”,请确保不要让 Visual Studio 删除您发布文件夹的内容,否则可能会导致未更新文件被覆盖
    • 感谢大家的回复。我仍在苦苦挣扎的是 DLL 版本控制部分。我做了更多研究,似乎有些东西告诉 Web 应用程序要使用哪些 DLL 版本以及来自哪个文件夹(\bin)。另外,我计划移动所有文件,但我需要了解项目编译后需要哪些文件。
    【解决方案2】:

    听起来您在谈论预编译的 .net 应用程序。该应用程序使用 Aspnet_compiler.exe 进行编译,并将新的 DLL 复制到主机。

    DLL 不必注册,IIS“知道”如何处理预编译的 .net 应用程序。这几乎只是随手可得;与直接复制 .aspx 文件不同。

    您可以更新 DLL 的子集(例如,类库)。有多种模式可供您编译全部或部分应用程序。

    【讨论】:

    • 如何在不更改后面代码的情况下更改 aspx 文件,您必须编译还是移动 aspx。
    【解决方案3】:

    当您更改 DLL 时,通常您可以直接放弃它,假设您没有通过特定版本号进行引用。一般来说,为了安全起见,我在更改 DLL 时会再次复制整个网站。它不是绝对必要的,但如果您的网站不太大,它可能是最简单的方法。

    如果您要更改未以其编译形式部署的文件(App_Code 文件夹中的 .aspx、.aspx.cs、.cs 文件),您只需更新该特定文件并重新启动 IIS 即可。

    【讨论】:

      【解决方案4】:

      一般来说,如果依赖程序集发生更改,您只需部署新程序集即可。但是,如果该程序集的任何接口发生更改或 Web 应用程序有其他相应的更改,那么您将不得不部署整个事物。

      也就是说,我见过需要完全重新编译、部署和测试的商店,即使依赖程序集中的一行代码发生了变化。

      完整的部署部分非常简单。

      1. 右键单击 Web 项目,然后单击发布。
      2. 直接发布到网络服务器(我不推荐这样做)或发布到本地目录。
      3. 进行生产推送所需的任何配置更改。
      4. 如果您发布到本地目录,请将编译后的文件复制到您的生产服务器。

      有人说先删除生产文件,再复制。其他人说复制到新目录并将 IIS 重新指向新目录。你必须看看什么对你有用。

      现在,Web 应用程序为您提供的一件事是配置转换。这意味着您可以让编译器根据您发布到的环境进行配置更改。我强烈建议您研究和使用这些。它降低了不良推送的可能性。

      【讨论】:

      • 只是一个后续.....可以在不编译整个项目的情况下更改哪些文件。我的印象是必须编译 aspx 文件,但现在我发现情况并非如此。
      • @Jamal:对于 Web 应用程序,无需重新编译应用程序即可更改 .aspx 页面本身。但是,如果背后的代码发生更改,则需要重新编译应用程序。此外,任何工件(如 javascript、图像、css 等)都可以在不重新编译应用程序的情况下进行更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多