在构建期间将Visual Studio项目文件复制到输出目录

Syn*_*ech 36 visual-studio-2003 projects-and-solutions build visual-studio

当我构建Visual Studio项目时,可执行文件将写入项目属性页中指定的输出目录.

我有一个项目,其中包含程序使用的一些额外文件(例如,.ini文件).

如何配置项目以将文件复制到输出目录,以便在程序运行时,它的CWD中有另一个文件的副本?

我检查了文件的属性页,除了从构建中排除它(禁用)的选项之外没有任何其他用处,并且custom-build-tool命令为空(加上它是一个纯文本文件,不需要任何处理).

Dmi*_*lov 37

要将文件复制到Visual Studio 2003中的输出目录,可以使用Post-Build事件:

  1. 右键单击项目 - >属性
  2. 公共属性 - >构建事件
  3. 将Post-Build事件命令行设置为:

    xcopy /y $(ProjectDir)my_file.ini  $(ProjectDir)$(OutDir)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 好的,建立!

  • 那应该是copy/y"$(ProjectDir)my_file.ini""$(OutDir)".因为可能包含空格的目录路径. (4认同)
  • 它不应该只是$(OutDir)吗?$(ProjectDir)已包含在其中(好吧,除非您修改了输出的位置).您只想使用输出目录. (2认同)

Dmi*_*lov 27

请尝试在解决方案资源管理器中选择文件 然后,您应该能够在"属性"窗口中看到其属性(F4如果它不可见则按下).你会发现有两个属性:

  • "建立行动"和
  • "复制到输出目录"

将"构建操作"设置为"内容",然后 - 为"复制到输出目录"设置选择适当的值.

带有"Build Action"和"Copy to Output Directory"设置的文件属性窗口

带有

如果上述方法不适合您,请阅读此文章" 使用.inf文件复制到输出目录问题 ".然后看看这个" Visual Studio:非默认文件类型的默认构建操作 "

希望有所帮助

  • 这适用于某些项目类型,但不适用于所有项目类型。例如,它适用于 C# 类型的项目,但不适用于 C++。 (3认同)
  • VS2003似乎没有这个功能(出于某种原因). (2认同)

Kie*_*ler 7

对于 VS 2017,Dmitry Pavlov 发布的命令如下:

xcopy /y "$(ProjectDir)my_file.ini"  "$(OutDir)"
Run Code Online (Sandbox Code Playgroud)

如果项目目录的路径中有空格,引号很重要。


Syn*_*ech 5

当我在文件的“属性页”中搜索构建动作字段时,我有一个想法:设置自定义构建步骤来复制文件(手动)。事实证明,这比我想象的要容易。我想这将需要使用cmd或其他外部可执行文件(xcopyrobocopy等等),但是这是没有必要的。

我将“定制构建步骤”设置如下:

Command Line : copy $(InputFileName) $(OutDir)
Description  : Copying foobar...
Outputs      : $(InputFileName)
Run Code Online (Sandbox Code Playgroud)

设置输出字段(正确)是至关重要的,这是为了防止VS始终认为项目已过时且需要重新构建(我不确定是否需要在前缀$(OutDir)\)。

它反映在“输出”窗口中,如下所示:

Copying foobar...
        1 file(s) copied.
Compiling resources...
Linking...
Run Code Online (Sandbox Code Playgroud)


Geo*_*die 5

扩展 Synetech 的答案。

在 VS2019 中,在解决方案资源管理器中右键单击要复制的文件,然后选择“属性”。然后在“常规>>项目类型”下更改为“复制文件”,然后单击“应用”。
您现在应该在“目的地”等的“属性”页面中具有 UI 字段。