暂存非托管库或资源时的常见做法是将这些资源添加为项目的链接,并将其设置为复制到输出目录。
从Visual Studio 2013开始,此方法处理得很好,即使它们被引用的库Foo
(然后由Application消费)Bar
也将最终出现在Bar
的输出目录中。
不过,对于文件目录而言似乎并非如此。
在这种情况下,我的应用程序似乎仅在重建时将此文件目录复制到输出目录。然后,不可避免地,我将进行一些构建操作,并且我会注意到Libs
目录再次为空。然后进行重建并cef.pak
返回。
我对此的解决方案是采用构建步骤将Libs
目录手动复制到输出目录。尽管我找不到合适的宏来通用地表示,即使此构建步骤是的一部分Foo
,但我仍希望将文件复制到的输出目录Bar
(例如,VS中的StartUp Project)。
更新
谢谢大家的出色回答,并对此进行了测试。我要澄清的是,当两者之间有额外的库时,我仍然会看到此问题。也就是说,应用程序Bar
引用库Foo
引用Other
了带有这些链接文件的那个库。在这种情况下,将Other
的链接文件设置为复制到输出目录时,它们似乎只能在重建时使用。我对此的解决方案不理想,那就是直接Foo
参考Other
。
除非您重建/清理解决方案,否则VS确实会从输出文件夹中删除文件。所以我相信您忘了说您的程序(或第三方)这样做了。
首先:这是一个类似/精确错误的例子。
下载解决方案并执行以下步骤:
如果重复步骤1-5,您将收到相同的行为
第二:我已经遇到了这个问题。当我的团队成员之一报告此问题时,那么他收到的答案是“不是错误,而是功能”。
据我所知,没有“魔术按钮”可以解决这个问题。
但是有几种解决方法:
(如您所做的那样)添加构建前/构建后事件。我建议您在新的构建配置中执行此操作。
将Foo的生成输出文件夹更改为Bar输出文件夹。
在代码中添加if调试路径替换:
#if DEBUG
cefFilePath = <build output of foo>
#endif
将文件作为嵌入式资源,然后将其提取。
创建扩展\外部程序来解决此问题。每个项目文件都保留有关这些文件的信息:
<ItemGroup> <None Include="Libs\cef.pak"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup>
应用程序/插件将为您完成这项工作。
我可以提供更多的解决方案/解决方法,但是我相信您做对了-> build event。
编辑:
我在链接中更新了示例。现在,该解决方案包含3个解决方法示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句