Visual studio 在生成期间将Visual Studio项目文件复制到输出目录

Visual studio 在生成期间将Visual Studio项目文件复制到输出目录,visual-studio,build,projects-and-solutions,visual-studio-2003,Visual Studio,Build,Projects And Solutions,Visual Studio 2003,当我构建一个VisualStudio项目时,可执行文件被写入项目属性页中指定的输出目录 我有一个项目,它有一些程序使用的额外文件(例如,.ini文件) 如何将项目配置为将文件复制到输出目录,以便在程序运行时,在其CWD中有另一个文件的副本 我检查了文件的属性页,除了将其从生成中排除的选项(已禁用)之外,没有其他有用的选项,并且自定义生成工具命令为空(加上它是一个不需要任何处理的纯文本文件)。请尝试在解决方案资源管理器中选择该文件。然后,您应该能够在“属性”窗口中看到它的属性(如果不可见,请按F4

当我构建一个VisualStudio项目时,可执行文件被写入项目属性页中指定的输出目录

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

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


我检查了文件的属性页,除了将其从生成中排除的选项(已禁用)之外,没有其他有用的选项,并且自定义生成工具命令为空(加上它是一个不需要任何处理的纯文本文件)。

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

  • “构建行动”和
  • “复制到输出目录”
将“构建操作”设置为“内容”,然后为“复制到输出目录”设置选择适当的值

具有“生成操作”和“复制到输出目录”设置的文件属性窗口

如果上面的方法不适合你,请阅读这篇文章。然后看看这个“


希望有帮助

当我在文件的属性页中搜索构建操作字段时,我有一个想法:设置自定义构建步骤以复制文件(手动)。这比我想象的要容易。我认为它需要使用
cmd
或其他外部可执行文件(
xcopy
robocy
,等等),但这不是必需的

我将自定义构建步骤设置如下:

Command Line : copy $(InputFileName) $(OutDir)
Description  : Copying foobar...
Outputs      : $(InputFileName)
设置输出字段(正确)至关重要,以防止VS总是认为项目已过时,需要重建(我不确定是否需要在其前面加上
$(OutDir)\

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

Copying foobar...
        1 file(s) copied.
Compiling resources...
Linking...

要将文件复制到Visual Studio 2003中的输出目录,可以使用生成后事件:

  • 右键单击项目->属性
  • 公共属性->生成事件
  • 将生成后事件命令行设置为:

    xcopy /y $(ProjectDir)my_file.ini  $(ProjectDir)$(OutDir)
    
  • 好的,建造

  • 您需要额外的$(OutDir)。否则,在重建/清理步骤中,它将丢弃您的源代码

    CommandLine : copy "$(SolutionDir)last-script.js" "$(TargetDir)Debug"
    
    Outputs  : $(TargetDir)Debug\last-script.js
    
    改进Synetech 答复:

    2013 C++项目命令行:复制%(标识)$(OUDIR)描述:复制FoBar…输出:%(标识) 它可以工作,但会导致循环依赖,也就是说,每次您需要增量构建时都会执行它,而没有复制它

    要解决这个问题,您可以在目标文件夹中添加该项,将路径更改为$(OutDir),并将第一个添加的项中的该项用作输出。缺点-解决方案中有两个名称相似的项目


    另外,在postbuild中使用带/d/y参数的完整xcopy-仅当目标文件日期较旧时才复制。

    对于VS 2017,命令Dmitry Pavlov post将如下所示:

    xcopy /y "$(ProjectDir)my_file.ini"  "$(OutDir)"
    

    如果指向项目目录的路径中有空格,则引号非常重要。

    如果这对任何人都有帮助,我需要将我正在构建的项目的输出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.
    

    扩展Synetech的答案

    在VS2019中,在解决方案资源管理器中右键单击要复制的文件,然后选择“属性”。然后在常规>>项类型下更改为复制文件,然后点击应用。

    您现在应该在目标等的属性页中有UI字段。

    VS2003似乎没有该功能(出于某些原因)。这适用于某些项目类型,而不是所有项目类型。例如,它将用于C++类项目,但不适用于C++。@ B.K.,这是因为MS构建任务,对于不同的项目类型可能不同。你可以调整一下。从这里开始挖掘@DmitryPavlov,这很好;我只是指出它不会在任何地方都起作用。@B.K.当然,没有什么东西能在任何地方起作用。很好,VS至少允许扩展和执行开发人员可能需要的几乎所有操作。这也可以工作(虽然您不需要xcopy,但复制工作很好),但关键是它需要将文件名硬编码到项目的构建属性中。按照我所展示的方式,我们可以分别处理每个文件,并使用宏作为文件名。这取决于您使用的是哪个版本的Visual Studio。这个人特别提到VS2003,我有一个项目,这对我很有帮助。2003年的设置很糟糕-你甚至不能在每个文件的属性上指定任何内容,例如“复制到输出目录”。如果你想在项目是最新的并且不需要生成的情况下复制该文件,请将该文件添加到项目中。它不应该是$(OutDir)吗$(ProjectDir)已经包含在其中(除非您修改了输出的位置)。您只想使用输出目录。它应该是copy/y“$(ProjectDir)my_file.ini”“$(OutDir)”。由于目录路径可能包含空格。fo me vs2015它是
    命令行:copy“%(FullPath)”“$(OutDir)”
    说明:copy“%(FullPath)”“$(OutDir)”
    输出:%(FileName)。%(扩展名)
    没有“项目类型”,只有“file type”没有“copy file”选项