首页 > 解决方案 > 移动项目时 Visual Studio Nuget 程序集引用损坏

问题描述

我有一个复杂的软件解决方案,我想将它分成几个 Visual Studio 解决方案以便更轻松,但这一切都导致了一团糟,因为所有程序集引用都被破坏了。我检查了 .csproj 文件,发现程序集引用是正确的,指向正确的文件系统位置,所以我不明白问题出在哪里。

所以我尝试将 NuGet“包”文件夹复制到离 csproj 文件最近的位置,并更新 HintPath 以指向新位置,然后......它神奇地得到了修复!

例如:

不起作用

<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>

这工作正常:

<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>

有没有其他人经历过这种行为?在不陷入这个烦人的问题的情况下,构建共享通用项目的解决方案的正确方法是什么?有没有最佳实践?

更新:我又遇到了同样的问题,现在解决方案已经恢复到原来的 HintPath 值并再次卸载和加载项目。我不知道是什么原因,但现在项目再次编译成功。也许 Visual Studio 对程序集的路径有任何缓存,并且当项目移动到另一个文件夹时会变得疯狂?

标签: .netvisual-studionuget

解决方案


当您引用 Nuget 包时,“HintPath”会添加到您的 .csproj 文件中。顾名思义,它是对编译器的提示,以指向 Nuget Packages 文件夹的相对链接的形式告诉它在哪里查找程序集。

正如您所发现的那样,这也是一种烦恼,就好像您在不同的文件系统深度移动或签出项目时,路径已损坏。

解决此问题的最简单方法是从 packages.config 移动到更新的 PackageReference 包管理格式。这会将您的 Nuget 引用记录为包引用而不是程序集引用,并删除所有“HintPath”条目。

您可以在 Visual Studio 的 Nuget 包管理器选项中启用此功能。以下屏幕截图来自 Visual Studio 2019:

在此处输入图像描述

从“包管理”复制我的两个设置。

要迁移现有项目,请右键单击解决方案资源管理器中的 References 节点或 packages.config 文件,然后选择“Migrate packages.config to PackageReference” [完整说明]

如果由于某种原因上述方法不可行(例如,您使用的是旧版本的 Visual Studio),则HintPathOverwriteGitHubNuget上有一个名为 msbuild 的脚本,它可以在编译时动态更改 HintPath。


推荐阅读