以下是示例项目结构:
{ ProjectA }
{ packages } <-- packages are created here
{ ProjectA }
- ProjectA.csproj <-- references ProjectB and C.
- packages.config
- ProjectA.sln <-- contains all projects: A, B and C.
{ ProjectB }
- ProjectB.csproj
- packages.config
{ ProjectC }
- ProjectC.csproj
- packages.config
*{ packages} <-- *When I manually paste packages here. So one level above ProjectB.csproj file, then ProjectB compiles.
ProjectA解决方案包含所有三个项目:A,B和C.ProjectA参考ProjectB和ProjectC.
当我编译ProjectA(项目B和C也被编译)时,所有nuget包都被下载到与解决方案文件相同级别的{packages}文件夹中.问题是ProjectB没有编译.是的……只有ProejctB.我甚至不会调查为什么只有一个项目编译,尽管他们的配置完全相同.无论如何…
在ProjectB和C中,当我展开引用时,来自nuget的dll被视为缺失(带有黄色矩形).不管怎样,ProjectC都会编译,但ProjectB却没有.错误说它无法在packages文件夹中找到明确的引用.
我的问题是,我如何编程/配置该发送(伪代码):
“亲爱的ProejctB,请查找与解决方案文件在同一级别生成的包文件夹中的引用.解决方案文件,现在正在尝试编译.谢谢”
PS.从技术上讲,dll(参考)的路径将是有点动态的.它将根据打开/编译项目的解决方案文件而改变.可能吗?
解决方法:
解决它的最简单方法是将HintPath设置为:
<HintPath>$(SolutionDir)\packages\...
在ProjectB和ProjectC的.csproj文件中.它的字面意思是:“查找与解决方案文件在同一级别生成的包文件夹中的引用.解决方案文件,正在尝试立即编译您”
多次报告此问题.我相信它是固定的here.还有NuGetReferenceHintPathRewrite,但我没有测试它.