使用后期生成事件…VS2010将文件从一个项目复制到另一个项目


132

我有一个3个项目的解决方案。我需要将视图从一个项目复制到另一个项目。我可以通过以下构建事件复制创建的DLL:

在此处输入图片说明

因此,我想将项目“ /Views/ModuleHome/Index.cshtml”中的文件复制到项目2中的文件夹中。如何通过构建后事件将文件复制到所需项目中?谢谢

Answers:


309
xcopy "$(ProjectDir)Views\Home\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\Home"

如果要复制整个文件夹:

xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)MEFMVCPOC\Views"

更新:这是工作版本

xcopy "$(ProjectDir)Views\ModuleAHome\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\ModuleAHome\" /Y /I

以下是一些常用的开关xcopy

  • / I-如果复制多个文件,则视为目录。
  • / Q-不显示正在复制的文件。
  • / S-复制子目录,除非为空。
  • / E-复制空子目录。
  • / Y-不提示覆盖现有文件。
  • / R-覆盖只读文件。

2
我将此行添加到我的帖子生成中,并且出现以下错误“错误1命令“ xcopy“ C:\ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml”“ C:\ Users \ tcompton \ “ Downloads \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome”“已退出,代码2。这是什么意思?
BoundForGlory 2012年

查看输出窗口:Ctrl+W+O。该Views\ModuleAHome文件夹是否存在于目标位置?在输出窗口中查看正在执行的确切命令,然后阅读xcopy命令的文档以了解可用的不同开关:xcopy /?
Darin Dimitrov 2012年

1
文件夹“ Views \ ModuleAHome”存在,但不属于目标项目,这意味着您必须单击“显示所有文件”以使其在VS中出现。
BoundForGlory 2012年

1
我认为目标文件夹不是目标项目的一部分这一事实与xcopy没有任何区别。该命令直接在文件系统上运行。就使该文件夹显示为目标项目的一部分而言,自动化此任务可能会更加困难。
Darin Dimitrov

1
得到了... xcopy“ $(ProjectDir)Views \ ModuleAHome \ Index.cshtml”“ $(SolutionDir)MEFMVCPOC \ Views \ ModuleAHome \” / Y / I...。本文与您输入的social.msdn
BoundForGlory

20
xcopy "your-source-path" "your-destination-path" /D /y /s /r /exclude:path-to-txt- file\ExcludedFilesList.txt

注意源路径和目标路径中的引号,但排除列表txt文件的路径中没有引号。

ExcludedFilesList.txt的内容如下:.cs \

我正在使用此命令将文件从解决方案中的一个项目复制到另一个项目,并排除.cs文件。

/D Copy only files that are modified in sourcepath
/y Suppresses prompting to confirm you want to overwrite an existing destination file.
/s Copies directories and subdirectories except empty ones.
/r Overwrites read-only files.

谢谢。该/排除:作品加上引号后your-source-pathyour-destination-path。没有这些引号根本就行不通。
AechoLiu 2013年

@AechoLiu如果文件路径包含空格,则总是需要使用引号"My File.txt"
费利佩·罗梅罗

14

xcopy“ $(TargetDir)* $(TargetExt)”“ $(SolutionDir)\ Scripts \ MigrationScripts \ Library \” / F / R / Y / I

/ F –显示完整的源文件和目标文件名

/ R –这将覆盖只读文件

/ Y –禁止提示覆盖现有文件

/ I –假设目标是目录(但必须以结尾)

一个小技巧–在目标中,您必须以字符\结尾,以告诉xcopy目标是目录而不是文件!


8

调用Batch文件,该文件将Xcopy针对所需文件源运行到目标

call "$(SolutionDir)scripts\copyifnewer.bat"

7

我这样使用它。

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 
xcopy "$(TargetDir)$(TargetName).lib" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 


/F : Copy source is File   
/Y : Overwrite and don't ask me

注意此用法。$(TargetDir)已经有'\'“ D:\ MyProject \ bin \” = $(TargetDir)

您可以在命令编辑器中找到宏

在此处输入图片说明


1
@HarshilDoshi项目→项目属性→构建事件→PostBuildEvent
Polluks

3

这个命令对我来说就像一个魅力:

for /r "$(SolutionDir)libraries" %%f in (*.dll, *.exe) do @xcopy "%%f" "$(TargetDir)"

递归地将每个文件dllexe文件从中复制MySolutionPath\librariesbin\debug或中bin\release

您可以在这里找到更多信息


2

像以前的答复一样,我也建议xcopy。但是,我想用/exclude参数添加到Hallgeir Engen的答案中。参数似乎存在一个错误,导致该参数无法使用较长或包含空格的路径名,因为引号将不起作用。路径名称必须为“ DOS”格式,“文档”转换为“ DOCUME〜1”(根据此来源)。

所以,如果你想使用\排除参数,有一种变通方法在这里

cd $(SolutionDir)
xcopy "source-relative-to-path-above" "destination-relative-to-path-above
/exclude:exclude-file-relative-path

请注意,源路径和目标路径可以(并且,如果它们包含空格)应该在引号中,但不能位于排除文件的路径中。


2

如果要考虑平台(x64,x86等)和配置(调试或发行版),则可能是这样的:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.