如何设置nuget引用的动态路径?

时间:2018-04-26 19:30:58

标签: c# .net visual-studio nuget nuget-package-restore

以下是示例项目结构:

{ 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,请查找与解决方案文件在同一级别生成的包文件夹中的引用。解决方案文件,现在正在尝试编译。谢谢”

PS。从技术上讲,dll(参考)的路径将是有点动态的。它将根据打开/编译项目的解决方案文件而改变。有可能吗?

3 个答案:

答案 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中,将有一个选项可以在引用节点的上下文菜单中进行迁移(已在预览中提供):

migrate option

VS 2017已支持

PackageReference,因为大约15.1或15.2,只有迁移工具处于预览状态。

对于新项目,VS 2017(当前版本!),您已经可以选择默认的包参考样式,并允许为新项目选择它:

package reference style selection

答案 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中使用的包中的一些问题。

如果您仍然面临问题,请提供以下详细信息以供进一步分析。

  1. &#34; package config&#34;
  2. &#34; ProjectB.csproj&#34;
  3. msbuild编译日志,要知道你在哪个包中 面临问题。