Visual studio 在生成期间将Visual Studio项目文件复制到输出目录
当我构建一个VisualStudio项目时,可执行文件被写入项目属性页中指定的输出目录 我有一个项目,它有一些程序使用的额外文件(例如,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
.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)
CommandLine : copy "$(SolutionDir)last-script.js" "$(TargetDir)Debug"
Outputs : $(TargetDir)Debug\last-script.js
改进Synetech
答复:
另外,在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”选项