我有一个要在我的jenkins服务器上编译的csproj文件,它包含一个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>
当我在Windows中将AAACOPYNEWONLY
定义为系统环境变量时,一切正常,并且schema
文件夹被复制到ProjectDir
所指的位置。
但是当我直接在对msbuild的调用中提供变量时,不会创建该文件夹:
msbuild MyProject.csproj -t:ReBuild -p:AAACOPYNEWONLY=NO
[我也扫描了我的日志文件,但是没有什么迹象表明xcopy甚至已运行,这使我认为条件IF NOT DEFINED AAACOPYNEWONLY
不匹配。
为什么将变量作为arg提供给msbuild时,为什么变量未正确传递到事件中?
编辑:我简化了我的postbuild,只打印变量的内容:
<PostBuildEvent>
echo AAACOPYNEWONLY = "%25AAACOPYNEWONLY%25"
</PostBuildEvent>
仅打印AAACOPYNEWONLY = ""
。
csproj
或Configuration
相同的方式在Platform
文件中定义属性,例如<AAACOPYNEWONLY Condition=" '$(AAACOPYNEWONLY)' == '' ">NO</AAACOPYNEWONLY>