NuGet包添加了错误的提示路径

时间:2016-08-02 19:42:54

标签: nuget nuget-package nuget-spec

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

在我的nuspec中,我已经定义了包中的文件:

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

但是每当我将包添加到我的项目/解决方案时,它都会错误地添加一个提示路径指定:

<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>

这导致自动构建服务器找不到程序集并且无法构建。我可以手动修复提示路径,但不愿意。

我看过这篇文章(Failed to add NuGet package),但我发现它并不相关。这篇文章(NuGet package install uses specific assembly version in csproj files)似乎是指同一个问题,但没有答案。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用自定义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文件的提示路径。你说你确实想要使用一个提示路径,所以你可以删除它,如果MSBuild可以通过某种方式解析xyz.dll,例如它在GAC中。