我已经创建了自己的nuget软件包,我有一个既包含本机dll也包含C#dll的软件包。我看了这个question,特别是kjbartel答案。在nuspec文件中,将C#程序集放入lib文件夹中,如下所示:
<file src="some_csharp_asmb.dll" target="lib/net40" />
然后将C ++程序集放入Build文件夹中,如下所示:
<file src="some64_cpp_asmb.dll" target="Build/x64" />
除了nuspec文件,我还添加了一个目标文件,该文件安装在nuget软件包的build文件夹中:
<file src="my_package_name.targets" target="Build" />
具有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" />
<ContentWithTargetPath Include="@(NativeLibs)">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>%(FileName)%(Extension)</TargetPath>
</ContentWithTargetPath>
<None Include="@(NativeLibs)">
<Link>cpp_x64_native_dlls/%(FileName)%(Extension)</Link>
</None>
</ItemGroup>
</Project>
我将此软件包直接安装到某些项目中,并且一切正常。正如我在目标文件中指定的那样,我什至在Visual Studio中获得一个名为 cpp_x64_native_dlls 的快捷方式文件夹。当我直接安装此软件包(将其称为X)时,此方法有效。但是,如果我创建另一个将X作为依赖的程序包Y,那么我会遇到问题。在安装Y时,nuget会忠实地确定Y具有依赖项并安装X。但是,在这种情况下,似乎没有执行上面的X的目标文件。因此,本机dll不会复制到输出目录。
我在做什么错?我可以强制执行目标文件吗?