C# .Net Web应用程序和编译/部署

C# .Net Web应用程序和编译/部署,c#,asp.net,C#,Asp.net,我接管了一个引用DLL的web应用程序项目。该解决方案具有用于创建DLL的实际项目和类库。我需要对web应用程序进行更改并部署到生产环境中。我习惯于部署asp.net网站以及经典的asp,这是非常直接的,只是复制文件 我需要帮助来理解编译和部署过程。以下是一些问题: 1) 类库(DLL)已更改;我是否只编译类库项目并只移动Dll。 2) Web应用程序项目更改,dll保持不变;我要移动哪些文件 另外,如果有人能够澄清部署时如何处理DLL版本。我已经习惯了注销/注册DLL的旧方法,但现在不是这样。

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

我需要帮助来理解编译和部署过程。以下是一些问题: 1) 类库(DLL)已更改;我是否只编译类库项目并只移动Dll。 2) Web应用程序项目更改,dll保持不变;我要移动哪些文件

另外,如果有人能够澄清部署时如何处理DLL版本。我已经习惯了注销/注册DLL的旧方法,但现在不是这样。我担心同一个盒子上有多个DLL副本

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


Jamal

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


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

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

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


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

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

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

使用FileZilla上载时,可以指定希望如何处理现有文件覆盖。 我使用选项:“如果源文件更新,则覆盖”。这样的部署速度很快(只有已更改的文件才会被存储),而且安全,因为我们不会丢失文件

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


按照上面的步骤进行操作,您应该会没事。

一般来说,如果从属程序集发生了更改,您可以只部署新程序集。但是,如果该程序集的任何接口发生了更改,或者web应用程序发生了其他相应的更改,那么您就必须部署整个程序

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

完整部署部分相当简单

  • 在web项目上单击鼠标右键,然后单击“发布”
  • 直接发布到web服务器(我不建议这样做),或者发布到本地目录
  • 进行生产推送所需的任何配置更改
  • 如果发布到本地目录,请将编译后的文件复制到生产服务器
  • 有人说先删除生产文件,然后复制。其他人说复制到新目录并将IIS重新指向新目录。你得看看什么对你有用


    现在,web应用程序为您提供的一个功能是配置转换。这意味着您可以让编译器根据发布到的环境进行配置更改。我强烈建议您研究并使用这些。这会大大降低错误推送的可能性。

    注意:如果确实“如果源文件较新,则覆盖”,请确保不要让visual studio删除发布文件夹的内容,否则可能会导致覆盖未更新的文件。谢谢大家的回复。我仍在努力解决的是DLL版本控制部分。我做了更多的研究,似乎有东西告诉web应用程序要使用什么DLL版本以及从哪个文件夹(\bin)中。此外,我计划移动所有文件,但我需要了解由于项目已编译,哪些文件是必需的。只是后续…哪些文件可以在不编译整个项目的情况下更改。我的印象是必须编译aspx文件,但现在我发现情况并非如此。@Jamal:对于web应用程序,.aspx页面本身可以在不重新编译应用程序的情况下进行更改。但是,如果隐藏的代码发生更改,则需要重新编译应用程序。此外,任何工件(如javascript、图像、css等)都可以在不重新编译应用程序的情况下进行更改。在不更改代码的情况下对aspx文件进行更改如何?您需要编译还是只移动aspx。