C# 使用生成后事件…VS2010将文件从一个项目复制到另一个项目
我有一个包含3个项目的解决方案。我需要将视图从一个项目复制到另一个项目。我可以通过生成后事件复制创建的DLL,如下所示: 因此,我想将project one“/Views/ModuleHome/Index.cshtml”中的文件复制到project 2中的一个文件夹中。C# 使用生成后事件…VS2010将文件从一个项目复制到另一个项目,c#,visual-studio-2010,C#,Visual Studio 2010,我有一个包含3个项目的解决方案。我需要将视图从一个项目复制到另一个项目。我可以通过生成后事件复制创建的DLL,如下所示: 因此,我想将project one“/Views/ModuleHome/Index.cshtml”中的文件复制到project 2中的一个文件夹中。 如何通过生成后事件将文件复制到所需的项目?感谢调用批处理文件,该文件将运行Xcopy,以获取从源到目标所需的文件 call "$(SolutionDir)scripts\copyifnewer.bat" 如果要复制整个文件夹
如何通过生成后事件将文件复制到所需的项目?感谢调用
批处理
文件,该文件将运行Xcopy
,以获取从源到目标所需的文件
call "$(SolutionDir)scripts\copyifnewer.bat"
如果要复制整个文件夹,请执行以下操作:
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-覆盖只读文件
/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.
xcopy“$(TargetDir)*$(targettext)”“$(SolutionDir)\Scripts\MigrationScripts\Library\”/F/R/Y/I
/F–显示完整的源和目标文件名
/R–这将覆盖只读文件
/Y–取消覆盖现有文件的提示
/I–假定目标是目录(但必须以结尾)
一个小技巧–在target中,您必须以字符\结尾,告诉xcopy目标是目录而不是文件 像前面的回答一样,我也建议
xcopy
。然而,我想用/exclude
参数来补充Hallgeir Engen的答案。似乎有一个带有参数的bug阻止它处理长路径名或包含空格的路径名,因为引号不起作用。路径名需要采用“DOS”格式,并将“文档”转换为“DOCUME~1”(根据)
因此,如果要使用\exclude参数,有一个解决方法:
请注意,源路径和目标路径可以(并且应该,如果它们包含空格)在引号内,但是不排除文件的路径。我这样使用它
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)
可以在命令编辑器中找到宏
如果您想考虑平台(x64、x86等)和配置(调试或发布),应该是这样的:
xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y
这个命令对我来说就像一个符咒:
for /r "$(SolutionDir)libraries" %%f in (*.dll, *.exe) do @xcopy "%%f" "$(TargetDir)"
它递归地将每个dll
和exe
文件从MySolutionPath\libraries
复制到bin\debug
或bin\release
中
您可以在中找到更多信息,我将这一行添加到我的后期生成中,并得到此错误“错误1命令“xcopy”C:\Users\tcompton\Downloads\MEFMVCPOC\ModuleA\Views\ModuleAHome\Index.cshtml”“C:\Users\tcompton\Downloads\MEFMVCPOC\Views\ModuleAHome”“退出,代码为2。”这意味着什么?请查看输出窗口:
Ctrl+W+O
。目标位置是否存在Views\ModuleAHome
文件夹?查看输出窗口中正在执行的确切命令,然后阅读xcopy命令的文档以了解可用的不同开关:xcopy/?
。文件夹“Views\ModuleAHome”存在,但它不是目标项目的一部分,这意味着您必须单击“show all files”才能在VS中显示。我不这么认为目标文件夹不是目标项目的一部分这一事实对xcopy有任何影响。此命令直接对文件系统进行操作。至于使此文件夹作为目标项目的一部分出现,自动化此任务可能更困难。明白了。。。xcopy“$(ProjectDir)Views\ModuleAHome\Index.cshtml”“$(SolutionDir)MEFMVCPOC\Views\ModuleAHome\”/Y/I…本文对您的输入很有帮助,谢谢。/exclude:在向源路径和目标路径添加引号后起作用。如果没有这些引号,它根本不起作用。@AechoLiu如果文件路径有空格e,则引号总是必需的。g<代码>“My File.txt”@HarshilDoshi项目→ 项目财产→ 构建事件→ PostBuildEvent当平台为任何CPU时,此选项不起作用。您应该改用$(OutDir)。
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
xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y
for /r "$(SolutionDir)libraries" %%f in (*.dll, *.exe) do @xcopy "%%f" "$(TargetDir)"