【问题标题】:NuGet package adds incorrect hint pathNuGet 包添加了不正确的提示路径
【发布时间】:2016-12-08 07:47:57
【问题描述】:

在自动构建期间,我的 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) 似乎指的是同样的问题,但没有答案。有人有什么想法吗?

【问题讨论】:

    标签: nuget nuget-package nuget-spec


    【解决方案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 文件的提示路径。您说您确实想使用提示路径,因此如果 xyz.dll 可以通过 MSBuild 以某种方式解析,例如它在 GAC 中,您可以删除它。

    【讨论】:

    • 完美,让我试试,我认为这会是赢家
    • 我是否将目标文件放在 NuGet 包中?还是我把它放在消费项目中?
    • 放到build目录下的NuGet包中。然后在安装 NuGet 包时将其添加到项目中。现有 NuGet 包使用自定义 MSBuild 目标,例如 Xamarin.Forms 和 Microsoft.Bcl.Build。唯一吸引人们的是 .targets 文件需要与包 ID 具有相同的名称。
    猜你喜欢
    • 2012-09-03
    • 2012-10-20
    • 1970-01-01
    • 2012-05-27
    • 2014-07-15
    • 2013-07-14
    • 2020-06-19
    • 2023-04-03
    • 2017-01-04
    相关资源
    最近更新 更多