上面的答案存在二级依赖问题(至少在我的 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 项目。