【问题标题】:Native DLLs Not Imported When Installing NuGet Package安装 NuGet 包时未导入本机 DLL
【发布时间】:2018-04-09 13:31:21
【问题描述】:

我有一个 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 文件中插入一个“导入项目”部分,该部分读取我的 .targets 文件,然后将我的所有非托管 DLL 复制到我的 bin\Debug 目录中。我过去曾使用 Visual Studio 2015 成功完成此操作,但由于某种原因,我当前使用 Visual Studio 2012 的设置无法正常工作。我的 NuGet 包被安装,Reference Include=Managed... 部分被添加到我的 .csproj 文件中,但 .targets 文件永远不会被 Imported 并且我的非托管 DLL 永远不会被复制。

注意事项:

  • 我的 .targets 文件与我的 NuGet 包 ID 同名。
  • 我的视觉 Studio 安装使用 NuGet 2.0 版
  • 我怀疑问题有 与我的 Visual Studio 或 NuGet 版本有关。

【问题讨论】:

标签: visual-studio-2012 dll nuget nuget-package targets


【解决方案1】:

正如我在对问题的评论中提到的,我发现 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多