Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
C# 如何配置VS以只编译更改的代码_C#_Visual Studio_Compilation - Fatal编程技术网

C# 如何配置VS以只编译更改的代码

C# 如何配置VS以只编译更改的代码,c#,visual-studio,compilation,C#,Visual Studio,Compilation,我有一个非常大的解决方案,每次尝试调试时都会编译它。 所以我知道我可以在解决方案配置中禁用所有项目的构建,但有没有办法说Visual Studio只编译更改过的代码? 我肯定是这样 感谢您的支持。您应该使用“构建解决方案”。查看此链接如果您执行生成(而不是重建),Visual Studio实际上会立即执行此操作。但是,它会比其他项目更好地处理某些项目类型。例如,将始终生成安装或部署项目 您可以卸载任何不需要加速构建的项目 此外,我发现在不调试的情况下启动应用程序并在应用程序运行后附加调试器效果很

我有一个非常大的解决方案,每次尝试调试时都会编译它。
所以我知道我可以在解决方案配置中禁用所有项目的构建,但有没有办法说Visual Studio只编译更改过的代码?
我肯定是这样


感谢您的支持。

您应该使用“构建解决方案”。查看此链接

如果您执行生成(而不是重建),Visual Studio实际上会立即执行此操作。但是,它会比其他项目更好地处理某些项目类型。例如,将始终生成安装或部署项目

您可以卸载任何不需要加速构建的项目

此外,我发现在不调试的情况下启动应用程序并在应用程序运行后附加调试器效果很好。据我所知,这将最小化正在加载到正在运行的应用程序实际使用的调试符号的数量

据我所知,MSBuild(VS使用的生成引擎)将根据已更改的文件自动检测要重建的内容。
因此,请确保没有任何生成的文件随每次生成而更新。例如,当您使用源代码管理元数据更新(程序集)版本时。任何更改的文件都将触发使用它的所有项目以及依赖它们的所有项目的生成。像这样的设置每次都会有效地重建大部分应用程序。

正如Marnix和Anton所说的,这是VS通常所做的。但是,如果您的解决方案中有许多相互依赖的项目,并且您对一个组件进行了更改,该组件将被所有或大多数其他项目使用,那么它必须再次构建其他项目,以确保一切按预期工作

更新 因此,如果它开始重新编译,即使您没有做任何更改,我们也需要了解VS如何尝试了解它在增量构建中需要做什么

为此,它只需检查每个文件的日期时间,以及是否有任何更改。如果是,请重新编译该文件及其所有从属文件(例如,stdafx.h中的更改将导致完全重建,因为通常每个源文件都会引用此文件)

但这种行为也有例外。例如,安装项目将始终重建,即使没有进行任何更改(由于这一事实,我通常将安装项目从构建过程中排除,并仅在需要时手动启动)

所以,如果您只有C/C++、C#、VB等通常支持增量构建的项目,那么在两个构建之间肯定会有一些变化,即使您没有改变任何东西

以下是一些可能性:

  • 对源文件进行更改的生成前或生成后命令
    • 这可能是将repo中的修订号添加到AssemblyInfo文件资源中的自动更新
    • 或者是一个copy/delete命令,它会对目录结构进行一些更改(我曾经在一个预构建命令中使用这个命令来删除输出目录,以强制对每个构建进行重新构建)
  • 程序集版本的自动递增器
    • 可能通过使用
      [assembly:AssemblyVersion(“1.0.*”)]
      或其他一些外部过程来增加内部版本号

如果上述步骤之一发生在您的所有或大部分其他项目所依赖的模块上,则需要重建所有项目。

我将添加此步骤,因为没有人提到它-如果您的解决方案中有安装程序项目,则每次重建或运行程序时都会重建该项目,即使没有其他项目发生变化。由于构建安装程序项目可能需要大量时间(对于我的中型项目,在我的机器上大约需要45秒),这是一个问题


要解决此问题,只需进入配置管理器(右键单击解决方案-->属性-->配置属性),并在调试模式下取消选中“构建”安装程序项目。

1/在详细模式下检查构建日志(工具->选项->项目和解决方案->构建和运行)

2/在可能的错误中,可能存在导致问题的“复制本地”模式下的dll,如果是这种情况,请转到项目引用,找到该dll并将“复制本地”值设置为false

[我在这里找到了这些解决方案]

[查看此内容]()如果我想调试初始化过程,该怎么办?我的问题是,即使我没有改变任何事情,它也会让所有人感到滑稽。。。我确信有一些选项,比如:运行时,调试->全部重建,它需要是:运行时,调试->构建all@rodnower-我的建议无助于您调试应用程序初始化。我已经扩展了我的答案,希望这有帮助。检测引擎有缺陷。我的解决方案中有两个具有库依赖项X的可执行文件。如果我构建可执行项目a并运行它,然后构建可执行项目B,那么我可以可靠地再现VS尝试再次构建X,但由于文件被锁定而失败。这些都是简单的类库。是的,我知道它们之间的区别,但令人遗憾的是,即使我没有更改任何内容,也会重新编译……看起来,正如OliverRight所提到的,解决方案项目之间存在复杂的交叉引用。我有预构建命令,可以创建构建过程中包含的测试类。非常感谢。我有一个带有“始终复制”的DLL,如果更新的返回增量构建,则更改为“复制”。如果您在像我这样的企业环境中工作,可能对生成的代码有依赖关系,这些代码可以在每次编译之前生成,这几乎肯定会导致它每次都重新生成。有点“无聊”,但很容易错过。非常感谢。