Я скопировал ваш скрипт и встретил ту же проблему. Согласно сообщению об ошибке The syntax of the command is incorrect
, что-то не так с синтаксисом, может быть пробел, новая строка, в которой я точно не уверен: (
Как определить задачу PostBuild для выполнения некоторых операций cmd (создать
папки копируют файлы, как показано выше), если переменная существует, или
ничего, если это не так?
В качестве обходного пути: Возможно, вы можете удалить оператор суждения изнутри PostBuildEvent. Затем используйте msbuild условие , чтобы определить, определена переменная или нет, попробуйте использовать скрипт, подобный этому:
<!--<PropertyGroup>
<MyEnvVar>C:\Test</MyEnvVar>
</PropertyGroup>-->
<PropertyGroup>
<PostBuildEvent Condition="$(MyEnvVar)!=''">
IF NOT EXIST "C:\tmp\" mkdir "C:\tmp\"
IF NOT EXIST "$(MyEnvVar)\Addins\Software\bin\$(PlatformName)\" mkdir "$(MyEnvVar)\Addins\Software\bin\$(PlatformName)\"
copy "$(TargetPath)" "$(MyEnvVar)\Addins\Software\bin\$(PlatformName)\"
</PostBuildEvent>
</PropertyGroup>
В vs щелкните правой кнопкой мыши проект и добавьте в него скрипт, местоположение должно быть:
<Project...>
...
<!--<PropertyGroup>
<MyEnvVar>C:\Test</MyEnvVar>
</PropertyGroup>-->
<PropertyGroup>
<PostBuildEvent Condition="$(MyEnvVar)!=''">
IF NOT EXIST "C:\tmp\" mkdir "C:\tmp\"
IF NOT EXIST "$(MyEnvVar)\Addins\Software\bin\$(PlatformName)\" mkdir "$(MyEnvVar)\Addins\Software\bin\$(PlatformName)\"
copy "$(TargetPath)" "$(MyEnvVar)\Addins\Software\bin\$(PlatformName)\"
</PostBuildEvent>
</PropertyGroup>
</Project>
Затем right-click the project
, выберите reload project
и проверьте, помогает ли это в достижении вашей первоначальной цели.
1. PostBuildEvent
будет работать только тогда, когда MyEnvVar
определено и имеет свое значение.
2. Две команды mkdir будут вызываться, когда каталог C:\tmp\
и $(MyEnvVar)\Addins\Software\bin\$(PlatformName)\
не существует
3. Затем команда copy скопирует вывод вашего проекта в папку назначения. Я удаляю $(TargetFileName)
, поскольку он представляет собой xxx.exe или xxx.dll, я думаю, что в этом нет необходимости, или, возможно, вы действительно хотите $(AssemblyName)
. Пожалуйста, дайте мне знать, если это поможет решить вашу проблему:)