.net - 移动项目时 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 对程序集的路径有任何缓存,并且当项目移动到另一个文件夹时会变得疯狂?
解决方案
当您引用 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),则HintPathOverwrite
在GitHub和Nuget上有一个名为 msbuild 的脚本,它可以在编译时动态更改 HintPath。
推荐阅读
- r - 如何使用 r 提取 data.frame 的数组索引
- javascript - 了解document.documentElement.clientWidth/Height返回哪个视口,与window.innerHeight/innerWidth的区别
- json - 'flutter' 无法识别为 cmdlet 中的名称
- c++ - C++ 在构造函数初始化列表中初始化模板数组
- python - 4d np.array() 就像 1d np.array()
- python - 代理身份验证 selenium ERR_TUNNEL_CONNECTION_FAILED
- swift - CGBitmapContext 比 CALayer 的 draw() 慢 2 倍
- node.js - 没有得到直接响应
- python - Python Round_down
- c# - 有没有办法在运行时接受未知类型?