【发布时间】: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 版本有关。
【问题讨论】:
-
我刚刚发现根据发行说明,直到 NuGet 2.5 版才添加构建目录中 .targets 文件的自动导入功能:docs.microsoft.com/en-us/nuget/release-notes/nuget-2.5
标签: visual-studio-2012 dll nuget nuget-package targets