当我构建Visual Studio项目时,可执行文件将写入项目属性页中指定的输出目录。
我有一个项目,其中包含一些程序使用的额外文件(例如.ini
文件)。
如何配置项目以将文件复制到输出目录,以便在程序运行时,它的CWD中有另一个文件的副本?
我检查了文件的属性页,除了从构建中排除它(禁用)的选项之外没有任何其他用处,并且custom-build-tool命令为空(加上它是纯文本)不需要任何处理的文件。)
答案 0 :(得分:34)
要将文件复制到Visual Studio 2003中的输出目录,您可以使用Post-Build事件:
将构建后事件命令行设置为:
xcopy /y $(ProjectDir)my_file.ini $(ProjectDir)$(OutDir)
确定并构建!
答案 1 :(得分:25)
请尝试在解决方案资源管理器中选择该文件。然后你应该能够在属性窗口中看到它的属性(如果它不可见,按 F4 )。你会发现有两个属性:
将“Build Action”设置为“Content”,然后 - 为“Copy to Output Directory”设置选择合适的值。
带有“构建操作”和“复制到输出目录”设置的文件属性窗口
如果以上方式不适合您,请阅读此帖“Copy to output directory issue with .inf file”。然后看一下这个“Visual Studio: default build action for non-default file-types”
希望有所帮助
答案 2 :(得分:5)
当我在文件的Property Page中搜索构建操作字段时,我想到了:将自定义构建步骤设置为 copy 文件(手动)。事实证明这比我想象的要容易。我认为需要使用cmd
或其他外部可执行文件(xcopy
,robocopy
等),但这不是必需的。
我按如下方式设置自定义构建步骤:
Command Line : copy $(InputFileName) $(OutDir)
Description : Copying foobar...
Outputs : $(InputFileName)
设置输出字段(正确)是至关重要的,以防止VS始终认为项目已过期并需要重建(我不确定它是否需要以$(OutDir)\
为前缀)
它反映在输出窗口中:
Copying foobar...
1 file(s) copied.
Compiling resources...
Linking...
答案 3 :(得分:2)
对于VS 2017,Dmitry Pavlov发布的命令如下:
xcopy /y "$(ProjectDir)my_file.ini" "$(OutDir)"
如果项目目录的路径中有空格,则引号很重要。
答案 4 :(得分:1)
万一这对任何人都有帮助,我需要将我正在构建的项目的输出dll复制到另一个项目中。
xcopy /y "$(ProjectDir)$(OutDir)$(TargetName)$(TargetExt)"
"C:\Application\MyApplicationName\bin\x86\Debug"
/y = overwrite file if already exists
$(ProjectDir) = location on your machine where the project lives
$(OutDir) = is where your current build setup outputs the build
$(TargetName) = What the project being built is set to be called. Ex: XXX of XXX.dll
$(TargetExt) = the extension of the build Ex: .dll of XXX.dll
"C:/..../x86/Debug" is the location to copy to.
答案 5 :(得分:1)
扩展Synetech的答案。
在VS2019中,在解决方案资源管理器中右键单击要复制的文件,然后选择“属性”。然后在“常规>>项类型”下更改为“复制文件”,然后单击“应用”。
现在,您应该在“属性”页面中的“目标”等位置具有UI字段。
答案 6 :(得分:0)
你需要额外的$(OutDir)。否则,在重建/清理步骤中,它会丢弃你的来源。
CommandLine : copy "$(SolutionDir)last-script.js" "$(TargetDir)Debug"
Outputs : $(TargetDir)Debug\last-script.js
答案 7 :(得分:0)
改善Synetech 回答:
在VS 2013 C ++项目命令行中:copy%(Identity)$(OutDir)描述:复制foobar ...输出:%(Identity) 它可以工作,但它会导致循环依赖,即每次你需要增量构建时都会执行,没有已经复制的仪表。
要解决此问题,您可以在目标文件夹中添加该项目,将路径更改为$(OutDir),并在第一个添加的项目中将其用作输出。缺点 - 两个名称相似的项目正在解决之中。
在postbuild中使用带有/ d / y参数的xcopy也很有用 - 仅在目标文件日期较旧时复制。