以下是示例项目结构:
{ 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却没有。错误说它找不到包文件夹中明确的引用。
我的问题是,如何编程/配置该发送(伪代码):
“亲爱的ProejctB,请查找与解决方案文件在同一级别生成的包文件夹中的引用。解决方案文件,现在正在尝试编译。谢谢”/ EM>
PS。从技术上讲,dll(参考)的路径将是有点动态的。它将根据打开/编译项目的解决方案文件而改变。有可能吗?
答案 0 :(得分:2)
解决此问题的最简单方法是将HintPath
设置为:
<HintPath>$(SolutionDir)\packages\...
在ProjectB和ProjectC的.csproj
个文件中。它的字面意思是:“查找与解决方案文件在同一级别生成的包文件夹中的引用。解决方案文件,它正在尝试编译你”
多次报告此问题。我认为这是固定的here。还有NuGetReferenceHintPathRewrite,但我没有测试它。
答案 1 :(得分:1)
由于packages.config正在慢慢被弃用,您可以将项目从packages.config迁移到ProjectReference
,其中在csproj文件中指定NuGet包,并使用共享全局位置来存储包(并且没有任何需要更改HintPath
的引用。)
在VS 2017版本15.7中,将有一个选项可以在引用节点的上下文菜单中进行迁移(已在预览中提供):
VS 2017已支持 PackageReference
,因为大约15.1或15.2,只有迁移工具处于预览状态。
对于新项目,VS 2017(当前版本!),您已经可以选择默认的包参考样式,并允许为新项目选择它:
答案 2 :(得分:0)
Nuget 3.x有packages.config概念,在这个包名称中有&amp;版本在2处提到(在package.config和.csproj文件中)
包config中的引用应该是这样的:
<package id="NewtonsoftJson" version="9.0.1" targetFramework="net46" />
csproj中的提示路径应该是这样的:
<HintPath>..\packages\NewtonsoftJson.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
这里&#34; .. \ packages&#34;说达到一级(意味着在解决方案级别)并寻找&#34;包&#34;文件夹中。
您应该验证提示路径是否存在。两个文件(package.config和.csproj)
中的包和版本应该相同(9.0.1)当你的Porject C编译成功时,它似乎只是ProjectB中使用的包中的一些问题。
如果您仍然面临问题,请提供以下详细信息以供进一步分析。