Mat*_*ein 65 c# msbuild ilmerge visual-studio-2010 visual-studio
所以,正如标题所示,我现在有一个VS2010解决方案,里面有大约50个项目.如果我对没有引用的"顶级"项目进行更改,那么VS仍会重建所有50个项目.我正在运行Visual Studio 2010 Ultimate而没有任何附加组件.我正在使用ILMerge将所有项目合并到一个文件中.
我已经通过检查较低级别dll的时间戳来验证这一点,并且看到它们确实已经重建,即使它们的代码没有被触及.
我已阅读所有回复和评论:
但是他们中的大多数只提供卸载项目的建议,以加快构建时间,但没有具体的解决方案.我试图弄清楚为什么VS认为这些依赖项目需要在不修复时进行重建.
我已经打开了'工具>选项>项目和解决方案>构建和运行>仅在运行时构建启动项目和依赖项'但没有任何效果.
此外,如果我只是重建一个只有8个(in)直接依赖项的"中级"项目,那么即使没有调用ILMerge并且没有修改任何依赖项目,它仍会构建所有8个项目.
感谢大家提供的任何见解.
添加
为了测试一些建议,我从头开始创建一个新的WinForms项目.然后我在该解决方案中创建了两个新项目.我将所有代码和资源(不是项目文件)从我的两个"最低级别"项目复制到两个全新的项目中(我通过将资源管理器中的文件和文件夹放到Visual Studio中的项目中来完成此操作).
最低的项目,我们称之为B,没有引用任何其他项目.下一个项目A仅引用了B. 因此,一旦我将所需的.NET和外部程序集引用添加到项目中,那么解决方案就会构建.
然后,我获得了我的新WinForm项目参考A并完成了完整版本.所以ref链是:
WinForm - > A - > B.
然后我只修改了WinForm 并进行了标准构建(F6).和以前一样,Visual Studio重建了所有三个项目.
源文件在项目中的某些系统eleminiation后乙我发现,如果我打消了我Resources.Designer.cs和Resources.resx(并评论指出,利用了的代码.Properties.Resources对这些资源的对象),然后修改的WinForm将不再重建整个解决方案,只会重建WinForm.
添加Resources.resx和Resources.Designer.cs返回项目B(但保留引用的代码,以便没有任何东西利用资源)将重新引入完整的构建行为.
要查看我的资源文件是否已损坏,我再次删除它们,然后创建一个新文件(通过Project Properties - > Resources)并重新添加与以前相同的资源,这是一个单独的Excel文件.使用此设置,仍将进行完全重建.
然后我删除了单个资源,但将资源文件保留在项目B中.即使没有添加资源,但资源文件仍在项目中,也会发生完全(不需要的)重建.
看起来只是将资源文件添加到(.NET 3.5)项目中将导致Visual Studio 2010始终重建该项目.这是一个错误或预期/预期的行为?
再次感谢所有人!
use*_*954 119
打开工具 - 选项,选择项目和解决方案 - 在树中构建和运行,然后将"MSBuild项目构建输出详细程度"设置为Diagnostic.这将输出构建项目的原因,即
项目'ReferencedProject'不是最新的.项目项"c:\ some.xml"将"复制到输出目录"属性设置为"始终复制".
要么
项目"MyProject"不是最新的.输出文件'c:\ MyProject.pdb'后输入文件'c:\ ReferencedProject.dll'被修改.
在这种情况下,修复是仅在较新时复制some.xml.
构建前事件和后期构建事件也可以触发构建.
Mat*_*ein 17
虽然我不认为这是一个修复,但这是一个解决方案,适用于我的情况......
我最初在50个项目中有大约5个项目包含一个Resources部分.这些项目将永远重建,因此他们所依赖的任何东西也将被重建.这5个项目中的一个是"基础"级别的库,其他项目中有48个被引用,因此,即使不需要,我的项目的96%也会被重建.
我的解决方法是使用依赖注入,接口和专用的"资源"项目.我没有让这5个项目引用自己的Resources对象,而是在每个项目中创建了一个可以提供所需资源的接口.然后,需要这些资源的类将要求在构造函数(构造函数注入)中创建它们时传入接口.
然后,我创建了一个单独的"资源"项目,其中有一个像normal一样的实际Resources部分.该项目仅包含资源本身,以及通过接口提供这些资源所需的每个接口的类.该项目将引用具有资源依赖性的所有其他项目,并实现项目所需的接口.
最后,在我的"顶级"项目中没有引用任何内容(以及exe实际构建的位置和我的组合根目录)我参考了"资源"项目,连接了DI,然后我们去了.
这意味着每次只重建两个项目("资源"和"顶层"),如果我进行部分构建(Shift-F6),那么它们根本不会重建.
同样,这不是一个很好的工作,但是每次构建需要大约3分钟时就会构建48个项目,所以我每天都会因为不必要的重建而损失30到90分钟.重构需要一段时间,但我认为这是一项很好的投资.
这是一个简化的图表.需要注意的是,从依赖Main.exe到Proj1和Proj2不以减少混乱中.

通过这种设计,我可以构建Proj1或Proj2不触发完全重建,因为它们对某个Resources部分没有任何依赖性.只Main知道Resources实施情况.
Yoc*_*mer 16
当项目具有实际不存在的文件时,会发生这种情况.
项目无法确定文件是否已更改(因为它不存在),因此重建.
只需查看项目中的所有文件,然后搜索附近没有可扩展箭头的文件.
我在VS 2015中遇到了同样的问题.
对我来说诀窍是:
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
为<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "MaximumTunnelEntries" -Value 0 -PropertyType "DWord"
之后我需要重建,现在似乎有效.
| 归档时间: |
|
| 查看次数: |
30793 次 |
| 最近记录: |