安装 NuGet 包时未导入本机 DLL

Native DLLs Not Imported When Installing NuGet Package

我有一个 NuGet 包,其中包含一个托管 DLL 和一堆本机 DLL。托管 DLL 使用 pinvoke 调用本机 DLL。我已成功将所有内容打包到具有以下目录结构的 NuGet 包中:

lib
    Managed.dll
build
    Unmanaged1.dll
    Unmanaged2.dll
    MyNuGetID.targets

我的 .targets 文件如下所示

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <NativeLibs Include="$(MSBuildThisFileDirectory)*.*" />
    <None Include="@(NativeLibs)">
      <Link>%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

到目前为止我所描述的一切都遵循找到的说明 here。根据我的阅读,当 visual studio 安装这个 NuGet 包时,它应该在我的 .csproj 文件中插入一个 "Import Project" 部分,该部分读取我的 .targets 文件,然后将我所有的非托管 DLL 复制到我的 bin\Debug目录。我过去使用 Visual Studio 2015 成功地做到了这一点,但出于某种原因,我当前使用 Visual Studio 2012 的设置无法正常工作。我的 NuGet 包已安装,Reference Include=Managed... 部分被添加到我的 .csproj 文件,但 .targets 文件从未被 Import 编辑,我的非托管 DLL 也从未被复制。

备注:

正如我在对问题的评论中提到的,我发现 NuGet 2.0 版附带的 Visual Studio 2012 不支持将 .targets 或 .props 文件放入 NuGet 的构建目录中的功能包裹。在添加该功能之前,我必须弄清楚人们是如何从 NuGet 包复制本机 DLL 的。显然,它是使用 NuGet 包的工具目录中的 powershell 脚本完成的。这是成功将我所有本机 DLL 复制到我的 Visual Studio 项目的输出目录的 powershell 脚本:

#File: tools\Install.ps1
param($installPath, $toolsPath, $package, $project)
$nativeBinDirectory = Join-Path $installPath "build"
$projectRoot = $project.Properties.Item("FullPath").Value
$binDirectory = Join-Path $projectRoot "bin\Debug"
Copy-Item $nativeBinDirectory\* $debugDirectory

我的新 NuGet 包目录结构现在如下所示:

lib
    Managed.dll
build
    Unmanaged1.dll
    Unmanaged2.dll
tools
    Install.ps1