zoukankan      html  css  js  c++  java
  • Visual Studio总是在重新生成项目?

    你是否曾经有过这种感觉:即使代码没有改变,Visual Studio也总是在重新生成项目?

    我们可以生成一个项目,然后不做任何处理后再次生成,我们就可以看见——VS正在开始生成项目,而我的项目代码并没有做任何更改。

    当我们改变了一些代码,VS在Build时会生成新的项目,这是容易理解的。但代码并没有更新的情况下,项目也会重新生成。这个问题着实困扰了我。带着这个疑问,我做了进一步的探索。

    问题分解##

    我们在这里列出了两个不同的问题:
    1)即使项目没有改变,VS也会重新生成项目。
    2)当有些东西发生了变化,VS倾向于生成比需要更多的项目。
    让我们看看这两个问题的探索结果。

    即使项目没有改变,VS也会重新生成项目##

    即使项目没有改变,VS也会重新生成项目。我们看看这个问题产生的根源。

    在我们的解决方案中,转到Tools - > Options。 选择Projects and Solutions - > Build and Run,然后在“MSbuild项目生成输出详细信息”中选择** Diagnostic **。

    使用中文版的童鞋,请自行转到工具 - > 选项。 选择项目和解决方案 - > 生成并运行,然后在“MSbuild项目生成输出详细信息”中选择诊断

    这样设置后,生成项目将会变得更慢,但会显示为什么需要重新生成。

    每当需要重新生成项目时,我们都会看到这样的信息:

    在“Output”窗口中,我们可以看到正在重新生成的内容以及原因。例如,我们看到我们有一个“Copy always”属性的图片。

    让我们来回顾一下为什么会出现这个问题。

    资源设置为“Copy always”##

    回顾我们刚刚看到的例子。 Copy always,就像这句话的字面意思一样,没有任何理由,谁也阻止不了我的那颗复制的心。 其实是有办法替换Copy always这个选项的。 我们可以在解决方案资源管理器中找到资源文件,按F4查看属性并更改“Copy to output directory”(复制到输出目录)字段。

    将CopyLocal的引用设置为true,但VSIX项目并不适用##

    如果在CopyLocal字段中(在引用属性中)将其设置为True,则会遇到此问题。 简单地说,设置CopyLocal为False解决了这个问题。但这一做法对VSIX项目不适用。VSIX文件中嵌入了所有内容, 因而不需要复制本地文件。

    循环依赖##

    在.NET项目中添加循环依赖是有点困难的。 VS不允许我们直接引用一个项目, 但是我们可以在项目的输出中引用.dll文件。

    假设我们有一个引用项目B的项目A.
    在项目B中,我们可以添加对A的输出文件路径(AinDebugA.exe)的引用。

    这是一个看似不赖的循环依赖, 但这将导致两个项目每次都会重新生成。

    除了去掉项目中的循环依赖,我们没有更好的解决办法。

    这些是我知道导致这个问题的原因。如果您遇到更多的原因,请对其进行评论,然后我会添加到这篇文章中。

    现在让我们看看另一个问题。

    当有些东西发生了变化,VS倾向于生成比需要更多的项目

    这不仅仅我的个人感觉,MSBuild以一种特定的方式工作,有时会做更多的工作。下面是这个问题的重现:

    假设我们有一个引用项目B的项目A。在项目B中,我们有一个项目A使用的公共函数Foo()。

    如果我们将Foo()更改为Foo(int x),那么A必须重新生成。但是,如果我们改变Foo()内部的逻辑,那么编辑器没有理由重新生成A,只需重新生成B即可。但事实上MSBuild将重新生成A和所有引用B的项目。

    我认为MSBuild只是根据修改日期工作。如果A引用B,并且使用者在修改A.dll之后修改了B,那么MSBuild也将重新生成A。

    我们对此可以做些什么?##

    大名鼎鼎的ReSharper应该可以解决这个问题。 ReSharper Build是ReSharper自带的,不需要额外的许可证。有关ReSharper的资料,请参阅:
    https://www.cnblogs.com/zhaoqingqing/p/3895427.html

    ReSharper Build还有其他很酷的功能,可以让你的生成更快。

    结语

    最严重的浪费就是时间的浪费。对时间宝贵程序猿来说,那些额外的不必要的生成真的很恼人。期待微软在以后Visual Studio版本中解决这个问题。

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/yayazi/p/8295968.html
Copyright © 2011-2022 走看看