gpt4 book ai didi

batch-file - 如何将生成后事件命令行传输到 MsBuild 中的批处理文件?

转载 作者:行者123 更新时间:2023-12-02 00:21:44 24 4
gpt4 key购买 nike

在我的演示项目的构建事件中,(类库项目),将构建结果 .dll 复制到特定文件夹,(自动创建如果它不存在),我在 Post-build event 命令行部分添加了以下命令行:

xcopy /Y "$(TargetDir)$(TargetFileName)" "$(SolutionDir)DemoApp\bin\$(ConfigurationName)\Packages\"

它完美地工作。

然后我尝试用对位于 $(SolutionDir) 中名为 CopyPackage.bat 的新批处理文件的调用来替换该命令行。批处理文件的内容正是上面的命令行:

call $(SolutionDir)CopyPackage.bat

然后我重建项目并得到以下错误:

Severity Code Description Project File Line Suppression State Error The command "call C:\TestProjects\DemoApp\CopyPackage.bat" exited with code 4. DemoApp

我错过了什么吗?


解决方案在得到大家的一些提示后:

构建后事件命令行中,我输入:(查看参数)

$(SolutionDir)CopyPackage.bat "$(TargetDir)$(TargetFileName)" "$(SolutionDir)DemoApp\bin\$(ConfigurationName)\Packages\"

批处理文件CopyPackage.bat中:

set targetfile=%~1
set targetdir=%~2
echo %targetfile%
echo %targetdir%
xcopy /Y %targetfile% %targetdir%

最佳答案

无需使用call,您可以直接调用批处理脚本。

我不得不提醒你,因为构建后目标无法知道任务的输入和输出,它总是必须执行脚本,即使什么都没有改变。

相反,如果您将其转换为 msbuild 目标并正确实现输入/输出信号,您将能够利用 MsBuild 的增量构建功能来节省大量时间。

例如:

<Target Name="CopyOutputs"
Inputs="@(BuiltAssemblies)"
Outputs="@(BuiltAssemblies -> '$(OutputPath)%(Filename)%(Extension)')">

<Copy
SourceFiles="@(BuiltAssemblies)"
DestinationFolder="$(OutputPath)"/>

</Target>

可以找到有关增量构建和输入/输出信号的更多信息:

关于batch-file - 如何将生成后事件命令行传输到 MsBuild 中的批处理文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55140822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com