在成功构建时,我希望将输出目录的内容复制到同一“基本”文件夹下的不同位置。此父文件夹是一个相对部分,可能会因源代码管理设置而异。
我列出了一些可供我使用的宏值...
$(SolutionDir) = D:\GlobalDir\Version\AppName\Solution1\build
$(ProjectDir) = D:\GlobalDir\Version\AppName\Solution1\Version\ProjectA\
我想将输出目录内容复制到以下文件夹:
D:\GlobalDir\Version\AppName\Solution2\Project\Dependency
需要从上述宏之一中获取基本位置“D:\GlobalDir\Version\AppName”。但是,没有一个宏值仅列出父位置。
如何仅提取构建后复制命令的基本位置?
这是您要放入项目的构建后事件命令行中的内容:
copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
编辑:或者如果您的目标名称与项目名称不同。
copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
如果没有任何 TargetDir 或其他宏指向正确的位置,请使用“..”目录向后移动文件夹层次结构。
IE。使用 $(SolutionDir)\..\..
获取您的基本目录。
有关所有宏的列表,请参见此处:
http://msdn.microsoft.com/en-us/library/c02as0cs.aspx
你可以试试:
$(SolutionDir)..\..\
我认为这是相关的,但是在直接使用 msbuild
命令行(从批处理文件)构建与从 VS 中构建时遇到了问题。
使用类似以下内容:
<PostBuildEvent>
MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>
(注意:start XCOPY
而不是 XCOPY
用于解决阻止复制的权限问题)
从批处理文件执行 msbuild 时,宏 $(SolutionDir)
评估为 ..\
,导致 XCOPY
命令失败。在 Visual Studio 中构建时,它可以正常工作。使用 /verbosity:diagnostic
确认以查看评估的输出。
使用宏 $(ProjectDir)..\
代替,这相当于同一件事,工作正常,并在两个构建方案中保留了完整路径。
Start
为我工作(在共享文件夹中为 xcopy
)。
直接使用 msbuild 没有意义吗?如果您对每个构建都执行此操作,那么您可以在最后添加一个 msbuild 任务吗?如果您只想查看是否找不到 Visual Studio IDE 上未显示的另一个宏值,您可以将 msbuild 选项切换为诊断,这将显示您可以使用的所有变量,如以及它们的当前值。
要在 Visual Studio 中打开此功能,请转到工具/选项,然后向下滚动树视图到名为项目和解决方案的部分,展开该部分并单击构建并运行,在右侧它们是指定构建输出详细程度的下拉菜单,将其设置为诊断,将显示您可以使用的其他宏值。
因为我不太清楚你想达到什么水平,以及你希望你的构建有多复杂,所以这可能会给你一些想法。我最近一直在做构建脚本,甚至在构建过程中执行 SQL 代码。如果您需要更多帮助甚至一些示例构建脚本,请告诉我,但如果它只是您想在构建结束时运行的一个小过程,那么完整的 msbuild 脚本可能有点过头了.
希望对日韩有帮助
我通过重新安装 VS 解决了我的问题,然后下载了 .Net Core(3.x 和 2.x)sdk 包
这是我的后期构建脚本
为我自己创建自定义路径。包括库和版本。复制 .dll(目标文件) 复制 *.md 文件。
脚本:
md c:\_References\$(ProjectName)\$(AssemblyVersion)
xcopy $(ProjectDir)$(OutDir)$(TargetFileName) c:\_References\$(ProjectName)\$(AssemblyVersion) /y
xcopy $(ProjectDir)*.md c:\_References\$(ProjectName)\$(AssemblyVersion) /y
不定期副业成功案例分享
/Y
。感谢您显示整个命令。xcopy
与通配符和适当的开关一起使用以获得类似的结果,同时保持源文件夹的(树)结构,例如:xcopy /i /e /s /y /f "<source>\MyFolder\*" "<destination>\MyFolder"
copy /Y "$(TargetPath)" "$(SolutionDir)somewhere\"
,没有额外的反斜杠,因为 $(SolutionDir) 包含尾随反斜杠(至少在 VS2012 中)