ror*_*ax2 3 .net visual-studio nuget
我有一个复杂的软件解决方案,我想将其分离到多个 Visual Studio 解决方案中以更轻松,但这一切都导致一团糟,因为所有程序集引用都被破坏了。我检查了 .csproj 文件,发现程序集引用是正确的,指向正确的文件系统位置,所以我不明白是什么问题。
因此,我尝试将 NuGet“packages”文件夹复制到离 csproj 文件最近的位置,并更新 HintPath 以指向新位置,然后......它神奇地得到了修复!
例如:
这并不能正常工作:
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
Run Code Online (Sandbox Code Playgroud)
这工作正常:
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
Run Code Online (Sandbox Code Playgroud)
有没有其他人经历过这种行为?在不陷入这个烦人的问题的情况下,构建共享公共项目的解决方案的正确方法是什么?有什么最佳实践吗?
更新:我又遇到了同样的问题,现在解决方案已经恢复到原来的 HintPath 值并再次卸载和加载项目。我不知道是什么原因,但现在项目再次成功编译。也许 Visual Studio 对程序集的路径有任何缓存,并且在将项目移动到另一个文件夹时会变得疯狂?
当您引用 Nuget 包时,“HintPath”会添加到您的 .csproj 文件中。顾名思义,它是对编译器的一个提示,它以指向 Nuget Packages 文件夹的相对链接的形式告诉编译器在哪里查找程序集。
这也是 - 正如您所发现的 - 一个烦恼,就好像您在不同的文件系统深度移动或检出项目一样,路径被破坏了。
解决此问题的最简单方法是从 packages.config 移动到较新的 PackageReference 包管理格式。这会将您的 Nuget 引用记录为包引用而不是程序集引用,并删除所有“HintPath”条目。
您可以在 Visual Studio 的 Nuget 包管理器选项中启用此功能。以下屏幕截图来自 Visual Studio 2019:
从“包管理”复制我的两个设置。
要迁移现有项目,请右键单击“引用”节点或“解决方案资源管理器”中的 packages.config 文件,然后选择“将 packages.config 迁移到 PackageReference” [完整说明]。
如果由于某种原因上述方法不可行(例如,您使用的是旧版本的 Visual Studio),则HintPathOverwrite可以在GitHub和Nuget上调用一个 msbuild 脚本,它可以在编译时动态更改 HintPath。
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |