C# Visual Studio中的发布/调试应用于哪个级别?

C# Visual Studio中的发布/调试应用于哪个级别?,c#,visual-studio-2010,compilation,release,C#,Visual Studio 2010,Compilation,Release,我目前正处于项目的最后阶段。作为我工作的一部分,我一直在重新组织主MVC解决方案,以使用对预编译库的引用,而不是在一个解决方案中包含15个不同的项目 我的问题与释放/调试开关的应用位置有关 例如,假设我的低级库是在调试模式下构建的,而我的主web客户端应用程序是在发布模式下构建的 项目是在发布模式(因为这是主应用程序的配置)还是在调试模式(因为主应用程序依赖于在调试模式下编译的二进制文件)下构建的?在您描述的场景中,您的web项目将构建为“发布”程序集,并且将依赖于“调试”程序集。使用引号的原因

我目前正处于项目的最后阶段。作为我工作的一部分,我一直在重新组织主MVC解决方案,以使用对预编译库的引用,而不是在一个解决方案中包含15个不同的项目

我的问题与释放/调试开关的应用位置有关

例如,假设我的低级库是在调试模式下构建的,而我的主web客户端应用程序是在发布模式下构建的


项目是在发布模式(因为这是主应用程序的配置)还是在调试模式(因为主应用程序依赖于在调试模式下编译的二进制文件)下构建的?

在您描述的场景中,您的web项目将构建为“发布”程序集,并且将依赖于“调试”程序集。使用引号的原因是,“发布”和“调试”程序集(除非使用非默认选项)之间的唯一区别是分别排除或包含调试符号和优化程序集中的IL。因此,这是一种非常有效的情况,发布程序集引用调试程序集,尽管它可能不是您想要的。因为调试程序集中会有更多的IL(因为它内置了wirhout优化),所以JIT需要做更多的工作来优化它将在机器上运行的代码,这可能会导致运行时的体验没有优化,速度较慢

根据是否对引用的程序集进行数字签名,可以使用生成后任务将调试编译的引用程序集替换为项目输出的版本编译程序集

可以这样说,您不应该在用于创建调试编译程序集的解决方案之外引用这些程序集,因为将DLL作为文件引用(而不是在IDE中进行项目引用)的操作性假设是,该程序集是其所包含功能的已测试、完成版本


总之,编译项目的方式并不取决于它引用的程序集的生成配置,但是,如果可能的话,您应该引用这些程序集的发行版编译版本。

“将生成项目”您指的是哪个项目,主应用程序还是库?Visual Studio的调试/发布设置是针对每个项目的,而不是针对每个解决方案的。是否确实需要拉出各种项目并引用已编译的库?您是独立地针对这些其他库进行开发,还是只随主应用程序进行更改?它们是否仅用于主应用程序?我问是出于好奇。@Adam-主要项目。本质上,我是在问“如果主应用程序是在发布模式下构建的,那么其他的一切都会尊重它吗?”@JoshSmeaton-有些东西已经成熟,不太可能改变,并被用于支持其他项目。这些是引用DLL的明确候选对象。有人可能会说,我应该在解决方案中保留特定于应用程序的内容,但正如我在OP中所说,我在一个解决方案中有15个项目。在解决方案资源管理器中变得非常耗时。不开玩笑:)如果要浏览的项目/文件数量是原因,请查看生产力工具、Resharper或CodeMaid。这三种方法都可以加快大型解决方案的导航速度。此外,你会发现通常情况下,比15个项目大得多的解决方案,我在ATM上工作的有3个项目有50+。长话短说,编译是“发布模式”,但JIT需要做额外的工作来整理调试依赖关系?JIT将在调试程序集本身上花费更多的时间,对调试库的调用将花费更长的时间,在发行版程序集中运行的代码应该/将比在调试程序集中运行的代码快(假设对执行的代码进行苹果对苹果的比较)