我来自PHP / Rails背景,其中部署网站通常意味着在Web服务器上正确的目录中FTP / Checkout源代码。
但是,我被要求开发一个ASP.NET网站,有些人建议我“发布”该网站,而不是直接复制源代码。显然,这会将代码隐藏(.cs)文件转换为已编译的DLL等。
我的应用程序不包含任何特定的秘密业务逻辑。这是一个常见的购物车应用程序。我的问题是,这是一个好主意吗?如何使C#代码驻留在服务器上使应用程序更安全?
答案 0 :(得分:6)
ASP.NET代码将始终被编译 - 或者:
就个人而言,我认为部署预编译代码并不会带来很多安全好处(除非你是obfuscating your pre-compiled DLLs)。
那说我更喜欢这些好处:
注意:来自Rails / PHP,您可能希望继续将.ASPX和.CS文件部署到您的服务器。好处是,以您可能习惯的方式修改正在运行的应用程序更容易。如果您遵循严格的部署生命周期,这不是一个很好的做法,但在某些情况下它可能很有用。
答案 1 :(得分:2)
我可以对预编译添加一个,这主要是关于安全性和性能;编译检查!!如果没有预编译,您可以轻松上传包含错误的一些代码文件,但在第一个用户使用此代码文件访问页面的13天之后无法找到。这是因为asp.net只会在需要时一次编译一个文件。
通过预编译,将编译所有文件,并立即捕获所有编译器错误。
尽管有关预编译的全部内容,但发布不仅仅是关于此。
另一个重要因素是您可以指示msbuild在发布期间执行的步骤。也许最重要的是web.config转换,你可以在这里阅读http://msdn.microsoft.com/en-us/library/dd465318.aspx。基本上,您可以创建一个转换文件,在发布期间将根据发布目标替换/添加/删除web.config中的值。
答案 2 :(得分:0)
是的,它更多的是关于编译而不是其他任何东西。为了能够运行网站,必须编译C#代码,这就是发布步骤所做的,同时将其转移到特定位置。
您桌面上的网站版本是开发版本,很可能是编译代码的调试版本。但是,在发布步骤中,您应该生成已编译代码的发行版本,这也会提高性能。
可以将ASP.net的发布步骤与创建普通Windows应用程序的安装程序进行比较,并在发布到运营服务器时将安装步骤合并。
答案 3 :(得分:0)
您的c#代码仍然驻留在服务器上,它只是作为编译代码驻留,而不是像PHP / Rails中习惯的那样以脚本的形式存在。
在PHP,rails或经典ASP中,您可以将脚本和xcopy / ftp写入Web服务器。然后PHP解释器会在每次Web请求进入时解析脚本,而在asp.net中编译代码然后将其复制到Web服务器,因此当Web请求进入时,执行速度会快得多。
将其广泛地视为在服务器上部署.exe文件与在文本文件中编写程序并使编译器解析文本文件并每次运行它。
它与更安全无关。
顺便说一下 - Bluebells学校之后的生活: - )