上面的答案存在二级依赖性问题(至少在我的Visual Studio 2019中为例)。
为了解决该问题,我通常创建一个空的c#控制台应用程序,并在此引用所有软件包。
然后,我使用此构建后的片段将项目主要工件以外的所有内容复制到packages
解决方案文件夹中命名的公用存储中。
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<PropertyGroup>
<SharedLibraries>$(SolutionDir)\packages</SharedLibraries>
</PropertyGroup>
<ItemGroup>
<Artifacts Include="$(OutDir)\**" />
</ItemGroup>
<RemoveDir Condition=" Exists('$(SharedLibraries)')" Directories="$(SharedLibraries)" />
<MakeDir Condition=" !Exists('$(SharedLibraries)')" Directories="$(SharedLibraries)" />
<Copy SourceFiles="@(Artifacts)" DestinationFolder="$(SharedLibraries)\%(RecursiveDir)" />
<ItemGroup>
<ExtraFiles Include="$(SharedLibraries)\$(ProjectName).*"></ExtraFiles>
</ItemGroup>
<Delete Files="@(ExtraFiles)" />
</Target>
packages
然后,将整个文件夹与一个自定义任务一起部署到c ++ / cli项目中。
如果引用的程序包以目标包为目标,AnyCPU
则此解决方案是合适的,否则必须进行修补才能对每种处理器体系结构使用不同的文件夹,并且可能行不通。
该解决方案并不完美,但是解决了从c ++ / cli项目可靠(间接)使用nuget包的目的。
该解决方案相对于此处发布的其他解决方案的优点是,没有对路径进行版本控制,因此在正常的软件包升级期间将永远不会更改c ++ / cli项目。