NuGet 包添加了不正确的提示路径

NuGet package adds incorrect hint path

在自动构建期间,我的 nuget 包需要不依赖于框架,但是我一直发现添加的 nuget 包错误地添加了 HintPath。

在我的 nuspec 中,我定义了作为包一部分的文件:

<files>
    <file src="lib\xyz.dll" target="lib\xyz.dll" />
    <file src="lib\xyz.xml" target="lib\xyz.xml" />
</files>

然而,每当我将包添加到我的 project/solution 时,它都会错误地添加一个提示路径,指定:

<Reference Include="xyz, Version=11.0.0.0, Culture=neutral, PublicKeyToken=4a3c0a4c668b48b4">
  <HintPath>..\packages\xyz.11.0.0.0\xyz.dll</HintPath>
  <Private>True</Private>
</Reference>

这导致自动生成服务器找不到程序集并无法生成。我可以手动修复提示路径,但我宁愿不这样做。

我看了一下这个post () but I don't find it relevant. This post (NuGet package install uses specific assembly version in csproj files) 好像指的是同样的问题但是没有答案。有人有什么想法吗?

您可以使用自定义 MSBuild 任务解决此问题。

不要将程序集添加到 lib 目录,而是创建一个以包 ID 命名的 MSBuild .targets 文件,并将您的 xyz 程序集放在它旁边。

\build
    \Net45
        \MyPackage.targets
        \xyz.dll
        \xyz.xml

然后在 MSBuild .targets 文件中添加您想要的引用。类似于:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Reference Include="xyz">
      <HintPath>$(MSBuildThisFileDirectory)\xyz.dll</HintPath>
    </Reference>
  </ItemGroup>
</Project>

上面显示了如何指定相对于 MSBuild .targets 文件的提示路径。你说你确实想使用提示路径,所以如果 xyz.dll 可以通过 MSBuild 以某种方式解决,比如它在 GAC 中,你可以删除它。