Я работаю над настройкой моих процессов сборки, и я столкнулся с одним интересным поведением. При использовании строковых функций свойств и изменении некоторых строк сборка начинает прерываться.странное поведение функций свойств
Например, я пытаюсь сделать эту вещь:
<PropertyGroup>
<BuildDependsOn>$(BuildDependsOn.Replace(";MyTarget", ""))</BuildDependsOn>
</PropertyGroup>
MyTarget моей пользовательской цель, которую я хочу удалить из свойства BuildDependsOn. Когда я пытаюсь это сделать, строка кажется удаленной правильно, но я получаю сообщение об ошибке, что цель не существует (это происходит как в Visual Studio 2010, так и в командной строке MSBuild).
Ошибка заключается в следующем:
The target "EntityDeploy;
BeforeBuild;
CoreBuild;
AfterBuild" does not exist in the project.
Я думаю, что когда я изменить это свойство, MSBuild останавливается, чтобы разобрать его значение и пытается искать одну цель (в том числе белых пространств, возврат каретки и новый):
"EntityDeploy;
BeforeBuild;
CoreBuild;
AfterBuild"
и выдает сообщение об ошибке, что такой цели не существует.
Я также попытался выполнить что-то более тривиальное, чтобы узнать больше об этой проблеме, и я пытался выполнить это:
<PropertyGroup>
<BuildDependsOn>$(BuildDependsOn.Trim())</BuildDependsOn>
</PropertyGroup>
ошибка снова появилась также с функцией Trim()
. Любая идея?
EDIT: Я пытался отладки и выяснить проблему, и я пришел через это: При проверке свойства BuildDependsOn
перед выполнением метода Trim()
, его значение, как это:
Value "BuildDependsOn"="\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n "
EvaluatedValue "\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n " string
escapedValue "\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n " string
После Trim()
метода, значения свойств, как это:
Value "BuildDependsOn"="EntityDeploy%3b\r\n \r\n BeforeBuild%3b\r\n CoreBuild%3b\r\n AfterBuild"
EvaluatedValue "EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild" string
escapedValue "EntityDeploy%3b\r\n \r\n BeforeBuild%3b\r\n CoreBuild%3b\r\n AfterBuild" string
Может быть, что запятой (; < =>% 3b) нарушают сборку? Как я могу это исправить?
Возможно, эти ссылки могут вам помочь: http: //stackoverflow.com/questions/5103026/in-msbuild-can-i-use-the-string-replace-function-on-a-metadata-item, и этот тоже http://msdn.microsoft.com/en-us/library/ms171458(v=vs.100).aspx – lnu
Я знаю этот OOB, но вы не можете сделать идиоматическую статью msbuild и определить одну группу свойств с помощью target и one out out, а затем использовать конфигурацию, чтобы выбрать, какой из них включен? –
@RitchMelton В обычных случаях я мог бы ... Фактически, я опубликовал упрощенную версию проблемы, которая у меня есть. Дело в том, что когда я включаю сторонний файл .Targets, сторонняя цель автоматически добавляется к свойству BuildDependsOn. Я хочу удалить его из этого свойства (чтобы он не запускался когда-либо, когда был построен проект) и решить в другом условии, должна ли цель выполняться. –