Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 在Visual Studio中重建C#项目的原因_Visual Studio_Visual Studio 2010_Msbuild_Build - Fatal编程技术网

Visual studio 在Visual Studio中重建C#项目的原因

Visual studio 在Visual Studio中重建C#项目的原因,visual-studio,visual-studio-2010,msbuild,build,Visual Studio,Visual Studio 2010,Msbuild,Build,我有一个大约320个项目的大型解决方案,其中即使对单个web表单进行很小的更改,也会导致测试/调试一个小更改所需的构建时间很长。我怀疑生成后的文件复制任务“接触”文件日期时间并导致多次重建 在没有任何强烈的命名和版本控制影响的情况下,除了源文件比二进制输出文件更新之外,VS 2010运行重建是否还有其他原因 附录:我对源树的大小或形状没有直接影响。它是一个稳定的核心产品的主干,任何短期的“非业务”变化都被认为是有风险和/或代价高昂的。我将提出我在这里收到的答案中提到的要点,作为项目未来方向的输入

我有一个大约320个项目的大型解决方案,其中即使对单个web表单进行很小的更改,也会导致测试/调试一个小更改所需的构建时间很长。我怀疑生成后的文件复制任务“接触”文件日期时间并导致多次重建

在没有任何强烈的命名和版本控制影响的情况下,除了源文件比二进制输出文件更新之外,VS 2010运行重建是否还有其他原因


附录:我对源树的大小或形状没有直接影响。它是一个稳定的核心产品的主干,任何短期的“非业务”变化都被认为是有风险和/或代价高昂的。我将提出我在这里收到的答案中提到的要点,作为项目未来方向的输入。

320项目在依赖关系树中有很多文件:所有项目都需要由构建引擎检查更改。使用类似的工具将允许您查看正在进行哪些文件操作来确认这一点

另外,在运行时加载320个程序集(位于.NET framework程序集之上)会降低应用程序的运行速度,并真正降低调试器的运行速度(需要加载大量符号)。查看调试|窗口|模块以查看已加载的模块)

除了减少解决方案中的项目数量(很可能有多个解决方案,每个解决方案都有一个子集)之外,您真的需要这么多单独的项目吗?在调试器外部,.NET加载器仅根据需要从程序集加载和JIT代码,较大的程序集并不意味着加载时间较慢,也不会避免Windows加载器的每个程序集开销。

C#由于文件已更改或依赖项已更改而重建,但也经常是因为“没有明显的原因”。您通常可以连续构建2到3次而不做任何更改,C#将滚动并重建大量代码

启用工具>选项>项目和解决方案>生成和运行>仅在运行时生成启动项目和依赖项。这将最大限度地减少构建,使之只与您打算执行的项目相关,因此,除非所有内容都是一个庞大的依赖关系树,否则这将显著减少构建中考虑的项目数量

然而,更好的解决方案是避免首先要求它编译

  • 每个项目都会给构建增加额外的开销。在我的电脑上,这大约是3秒。通过将两个项目的代码合并到一个.csproj文件中,我节省了3秒的构建时间。因此,对于300多个项目,您可以通过合并项目来缩短10分钟的构建时间,即在可能的情况下,在一个程序集中使用多个模块/名称空间,而不是在多个程序集中使用。您会发现您的应用程序启动时间也得到了改进

  • 许多项目不需要一直在建设。将它们分解为库项目,只需链接(引用)二进制文件即可

  • 同时禁用“本地复制”,将所有输出路径指向共享文件夹-这将通过避免在硬盘上复制320个DLL的320个副本来显著减少开销

  • 添加新的生成配置(例如“Debug FastBuild”),这些配置只生成您实际使用的程序集。使用Configuration manager,您可以取消锁定不希望构建的项目,并且,构建系统会忽略这些项目。从源代码管理获取代码后,构建完整的“调试”构建以刷新所有内容,然后切换回“快速构建”


您可以尝试使用msbuild和/v:d(用于诊断日志记录)构建解决方案


日志中可能有提示说明项目为何不是最新的。

首先,检查以确保对其他项目的引用是项目引用,而不是程序集引用

第二,检查循环引用

第三,将日志详细性设置为DIAGNOSTIC,查看第一行,了解为什么在第一次构建解决方案后重建项目


还有很多可以检查的地方,但首先看一下这三件事。

我认为,在320个项目中,您很久以前就已经超出了Visual Studio设计的舒适性极限

这里有很多很好的建议,但如果你真的必须保留320个项目,你可能想放弃VisualStudio来构建并设计自己的构建过程


正如我在评论中所说,至少在windows上,我建议使用一种构建工具,它构建在powershell上(因此包括在每台现代windows机器上),功能强大,重量轻,足以将整个过程提交给您的源代码管理。

我不知道如何具体解决您的重建问题,但解决方案中的320个项目不是一个好主意。如果我是你,我会发布一个问题,详细说明这些项目的类别,它们之间的一般依赖性是什么,询问使它们易于管理的最佳方法。天哪,320个项目?我打了一次10分,真让人受不了。我很抱歉。为此,您可以使用这样的工具创建多个解决方案或手动构建过程,将给定场景中的基本项目配对。感谢您提供的基本提示,我知道在构建大型解决方案时,小技巧可以非常有效。“无明显原因”包括更改构建配置(x86/x64,Debug/Releaase),它们似乎在
obj
文件夹中错误地创建了一个文件“build.force”:我相信它们可以通过构建后的步骤帮助指出最后一点