首页 > 解决方案 > .Net 项目总是重建,而不是由 CopyLocal 属性引起的最新

问题描述

无论我做什么,我的 .net 项目都会重建。我读了这篇文章https://oz-code.com/blog/visual-studio-keeps-rebuilding-projects-no-good-reason/,我在我的项目中发现了 CopyLocal 问题。

我收到了这条消息:Project 'PROJECTNAME' is not up to date. CopyLocal reference 'D:\...PROJECTPATH...\bin\x64\Debug\System.Net.Http.dll' is missing from output location.

我的 System.Net.Http.dll 是这样引用的(不要问我为什么 Private 设置了两次):.csproj 参考

Visual Studio 本身向我展示了它取自“参考程序集”: 在此处输入图像描述

正如我所知道的,从“参考程序集”中获取的程序集永远不会复制到输出文件夹中。

现在的问题是,如果我将 CopyLocal 更改为 false 它可以工作,但是在任何 NuGet 还原后它将再次设置为 True。我认为这是由于 HintPath 引用了应将 CopyLocal 设置为 True 的 NuGet 包这一事实引起的。

它只发生在“System.*”引用中。该项目是 .net 4.8,我使用的是最新的 VS2019。

有什么办法可以防止这种情况发生,还是我错过了如何解决这个问题?这是在一个相当大的解决方案中发生的,如果一切都一直在重建,那么构建起来就需要很长时间。

我尝试了 ReSharper-Build,这很有效,但如果可能的话,我想坚持标准。

感谢您的任何帮助。

标签: c#.netvisual-studiomsbuildcsproj

解决方案


有什么办法可以防止这种情况发生,还是我错过了如何解决这个问题?这是在一个相当大的解决方案中发生的,如果一切都一直在重建,那么构建起来就需要很长时间。

正如Hans所说,您system.net.http.dll在同一个项目中以不同的方式引用了两个,这样会造成构建混乱,从而无法确定引用的版本。它总是在重建。

事实上,System.Net.Http.dll它只是参考程序集的一部分Net Framework4.8并存在于参考程序集中。

所有这些都表明这是一个公共的、全局的 DLL,可以直接在 VS 中使用,而无需使用 nuget 安装它。所以我很好奇你为什么还在使用 nuget 来安装它。

注意:当您创建一个新net frameowrk4.8项目然后打开引用时,您会发现它已经system.net.http.dll从 Reference 程序集中引用。所以当你使用nuget安装或者使用nuget中的路径时HintPath,不会改变初始路径。

解决方案

要解决这个问题,请卸载nuget包System.Net.Http。右键项目--> Manage Nuget Packages-->卸载它。

在此处输入图像描述

希望它可以帮助你。


推荐阅读