将NuGet Boost DLL复制到输出目录以实现自动化

3
我在我的C++项目中使用了几个Boost库。这些库是通过NuGet包获取的,例如Boost Thread库boost_thread
编译和链接不需要对项目属性进行任何更改。但由于输出目录中缺少DLL文件,因此调试和运行应用程序会失败。
其中一个解决方案是使用后期构建步骤来复制所需的DLL文件。这在其他地方已经有所描述,例如如何让Visual Studio将DLL文件复制到输出目录?
以下是Debug配置所需的复制命令示例:
xcopy /F /Y "$(SolutionDir)\packages\boost_regex-vc100.1.58.0.0\lib\native\address-model-32\lib\boost_regex-vc100-mt-gd-1_58.dll" "$(OutDir)"

这个项目是Visual Studio 2010工程,但实际使用的IDE是Visual Studio 2013。不过有没有更好的方法来实现这个呢?

后构建脚本是你的朋友。 - Gilad
1
是的,我在我的问题中提到了这一点 - 我称其为步骤而不是脚本。但这并不是一个非常流畅的解决方案。 - Christian
1个回答

1
我使用了MSBuild的复制任务来实现这个目的:
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
  <BoostRT>-gd</BoostRT>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release' Or '$(Configuration)'=='Release_withPDB'">
  <BoostRT></BoostRT>
</PropertyGroup>
<ItemGroup>
<BoostDlls Include="..\packages\boost_log-vc120.1.59.0.0\lib\native\address-model-$(PlatformArchitecture)\lib\boost_log-vc120-mt$(BoostRT)-1_59.dll;
  ..\packages\boost_thread-vc120.1.59.0.0\lib\native\address-model-$(PlatformArchitecture)\lib\boost_thread-vc120-mt$(BoostRT)-1_59.dll;
  ..\packages\boost_system-vc120.1.59.0.0\lib\native\address-model-$(PlatformArchitecture)\lib\boost_system-vc120-mt$(BoostRT)-1_59.dll;
  ..\packages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-$(PlatformArchitecture)\lib\boost_chrono-vc120-mt$(BoostRT)-1_59.dll;
  ..\packages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-$(PlatformArchitecture)\lib\boost_date_time-vc120-mt$(BoostRT)-1_59.dll;
  ..\packages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-$(PlatformArchitecture)\lib\boost_filesystem-vc120-mt$(BoostRT)-1_59.dll" />
</ItemGroup>
<Target Name="CopyFiles" AfterTargets="Build">
  <Copy SourceFiles="@(BoostDlls)" DestinationFolder="$(OutDir)" />
</Target>

硬编码boost库的版本(1.59)并不是很好,但除此之外它工作得很好。

感谢分享您的想法。在我看来,使用xcopy命令或MSBuild任务进行复制并没有太大区别。您已经提到了硬编码版本和名称的主要缺点是必需的。我正在寻找一种方法,可以自动从NuGet传播信息。 - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接