Visual studio 为什么在.NET中分发应用程序的调试版本是一种不好的做法?

Visual studio 为什么在.NET中分发应用程序的调试版本是一种不好的做法?,visual-studio,debugging,deployment,installation,Visual Studio,Debugging,Deployment,Installation,在第一条评论中,@Cody Gray说: 呃,你知道你不应该 要重新分发“调试”版本, 对吧? 我很担心。在Visual Studio中,我通常在调试模式下开发应用程序,如果需要分发可执行文件,我所做的就是压缩.exe和所需的.dll文件(在bin\Debug文件夹中) 为什么这是个坏主意 这样做和在发布模式下做完全相同的事情有什么区别 编辑: 我很久以前问过这个问题,但我只是想对它进行编辑以增加一个区别: >在代码中使用调试.Asvest测试代码,并在发布模式下编译,所有这些行都消失了,这可

在第一条评论中,@Cody Gray说:

呃,你知道你不应该 要重新分发“调试”版本, 对吧?

我很担心。在Visual Studio中,我通常在调试模式下开发应用程序,如果需要分发可执行文件,我所做的就是压缩
.exe
和所需的
.dll
文件(在
bin\Debug
文件夹中)

为什么这是个坏主意

这样做和在发布模式下做完全相同的事情有什么区别

编辑:
我很久以前问过这个问题,但我只是想对它进行编辑以增加一个区别:


<> >在代码中使用<代码>调试.Asvest测试代码,并在发布模式下编译,所有这些行都消失了,这可能是另一个差异。

< P>我认为性能是个问题,

< P>纯C或VB.NET应用程序可以在任何带有正确的.NETFramework ReDIST的机器上工作,但是C++或C++ +CLI应用程序。(或混合应用)需要VC redist软件包,该软件包不包含所需库的调试版本。假设您的用户PC上未安装Visual Studio,只有可再发行的软件包,我想说,您的程序的调试版本可能根本无法在那里工作。

这取决于您使用何种语言进行开发你的程序。当你使用C++时,你会得到开销/RTC和Edg+持续的支持。他们会大量地减慢生成的代码,如果你使用递归,你的应用程序可能会在堆栈溢出上崩溃。从没有检查程序的情况下,你可以从检查代码中获得的运行时异常很难诊断。 如果您使用VB.NET,那么当您在没有调试器的情况下使用调试生成时,您将很容易发生不可插拔的内存泄漏。其“编辑+继续”支持代码中的缺陷会导致包含WithEvents事件的类的每个实例的WeakReference泄漏。您的应用程序最终会因OutOfMemory异常而死亡

如果使用C#,则不会出现任何错误,JIT编译器只会被阻止生成优化的机器代码,垃圾收集也没有那么有效。您的程序运行速度会很慢,并且消耗的内存会超出需要。这同样适用于VB.NET和C++/CLI


程序员在编写代码时,性能通常是最重要的。因此,发布调试版本有点亵渎神明。然而,大量程序通常完全被I/O、磁盘、网卡或数据库服务器限制。在这种情况下,原始cpu性能没有多大关系。

关于性能,我认为我很想看看关于调试和发布的一些指标


虽然我确信这些指标会因应用程序的具体功能而有所不同,但我的直觉是,大多数情况下,最终用户都不知道它们之间的区别。

还有法律原因- 引述: “注意,应用程序的调试版本不可重新分配,并且各种VisualC++动态链接库(DLL)的调试版本都不可重新分发。” 从

这是针对Visual Studio 2010“确定要重新分发哪些DLL”:
“不能重新分配VisualStudio中包含的所有文件;只允许重新分配在ReDist.txt.Debug版本中指定的文件,并且各种Visual C++ + DLL不能重新分配。从

他们并不是随便把名字从帽子里取出来。有很多不同的原因,我不知道。我真的很想把它们都列出来。这不是“在发布模式下完全相同的东西”"因为您是以完全不同的方式编译的。在我看来,一旦您理解了术语,您就有了问题的答案。在哪里有链接/参考阅读在调试模式和发布模式下编译的区别?我更感兴趣的是,为什么人们如此反对发布发布版本。它会让您花费更多吗?是r切换IDE设置和重新编译是否还有麻烦?无论如何,你应该有一个生成服务器,但即使你没有,这也不是一个困难的任务。我不明白最初问这个问题的原因,但这个答案真的让我摸不着头脑。你为什么在意?我怀疑性能的差异是显而易见的e、 但即使不是。我们不是在讨论可维护/可读代码和性能之间的折衷。这是基本的东西。好吧,我认为完全有理由问为什么,大概在调试模式下开发数周或数月后,您应该突然切换开关,并使用不同的配置构建/发布。为什么您要这样做除非有某种好处,否则这种改变是不合理的?为什么有人发帖问这种好处是什么?很好的回答,我会在十年或十五年前完全同意你的意见,但我要说的是,当我现在写代码时,通常最重要的是可读性和可维护性。现在我已经说过,我不知道我不会特意写慢代码,但我确实认为,总体而言,编译器在优化代码方面会为我做得相当好。(当然,我一般说来,这些都是例外。)