1

在自动构建期间,我的 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>

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

我看了一下这篇文章(无法添加 NuGet 包),但我觉得它不相关。这篇文章(NuGet 包安装使用 csproj 文件中的特定程序集版本)似乎指的是同样的问题,但没有答案。有人有什么想法吗?

4

1 回答 1

2

您可以使用自定义 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 中,您可以删除它。

于 2016-08-02T21:28:41.107 回答