jenkins - 传递给 MsBuild 的 Arg 在 PostBuildEvent 上无法识别
问题描述
我有一个 csproj 文件,我想在我的 jenkins-server 上编译它,其中包含一个 postbuild-event:
<PostBuildEvent>
IF NOT DEFINED AAACOPYNEWONLY GOTO :EOF
IF "%25AAACOPYNEWONLY%25" == "yes" (
SET NEWOPT=/D
) ELSE (
SET NEWOPT=
RMDIR /S /Q "$(Outdir)\..\schema"
)
XCOPY /E /Y /I /Q %25NEWOPT%25 $(ProjectDir)..\schema "$(Outdir)\..\Schema"
</PostBuildEvent>
当我AAACOPYNEWONLY
在 Windows 中定义为系统环境变量时,一切正常,并且schema
-folder 被复制到ProjectDir
所指的任何内容。
但是,当我直接在对 msbuild 的调用中提供变量时,不会创建文件夹:
msbuild MyProject.csproj -t:ReBuild -p:AAACOPYNEWONLY=NO
我还扫描了我的日志文件,但没有任何迹象表明 xcopy 甚至已运行,这让我假设条件IF NOT DEFINED AAACOPYNEWONLY
不匹配。
当作为 arg 提供给 msbuild 时,为什么变量没有适当地传递到事件中?
编辑:我简化了我的后期构建,简单地打印变量的内容:
<PostBuildEvent>
echo AAACOPYNEWONLY = "%25AAACOPYNEWONLY%25"
</PostBuildEvent>
这只是打印AAACOPYNEWONLY = ""
。
解决方案
您应该csproj
以与其他 MSBuild 属性相同的方式在文件中定义您的属性,例如Configuration
或Platform
<PropertyGroup>
...
<AAACOPYNEWONLY Condition=" '$(AAACOPYNEWONLY)' == '' ">NO</AAACOPYNEWONLY>
...
</PropertyGroup>
比您可以将其作为参数传递给 msbuild 命令行,例如-p:AAACOPYNEWONLY=NO
或-p:AAACOPYNEWONLY=YES
推荐阅读
- javascript - 无法以编程方式在循环中重置 vuetify v-select
- hardware - 是否可以使用外部 SIM 卡读卡器连接到蜂窝网络?
- jquery - 如何根据jQuery中对象数组的比较来更改键值?
- php - 如何在 laravel 6 中向多个表中插入数据
- django - 已删除 已解决,不再需要
- javascript - 如何从firebase获取数据并插入变量
- c# - 将 Packages.config 迁移到 PackageReference
- sql - postgres子查询中列的动态生成
- excel - 在范围内标记重复项,跳过空单元格
- kubernetes - 无法对 dahsboard kubernetes 进行身份验证:内部错误(500)(等待标头时超出 Client.Timeout)