В чем разница между ссылками на свойства, такими как $ (TargetPath) и! (TargetPath) во время событий MSBuild PreBuildEvent/PostBuildEvent? Я считаю, что они работают по-разному в некоторых ситуациях, но я не могу найти никакой документации по формеMSBuild Ссылки на свойства
http://msdn.microsoft.com/en-us/library/bb383819.aspx Это самый близкий мне кажется, чтобы быть в состоянии найти
Пример «(!»:..
<Target Name="BeforeBuild">
<CreateProperty Value="NewValue">
<Output TaskParameter="Value" PropertyName="TargetPath" />
</CreateProperty>
</Target>
<PropertyGroup>
<PreBuildEvent>
echo $(TargetPath)
echo !(TargetPath)
</PreBuildEvent>
</PropertyGroup>
Будет ли эхо оригинальный TargetPath, а затем эхо «NewValue». Это, однако, не работает для других свойств, которые я определил.
Любая помощь очень ценится!
Интересно. Можете ли вы опубликовать полный proj-файл, демонстрирующий это поведение? Я попытался воспроизвести его, расширив образец «ConsoleApplication1.csproj», но не смог. 'Echo! (TargetPath)' просто печатает "! (TargetPath)". –
Если что-то не задокументировано, вы не должны использовать его вообще. –
Я размышлял и «изучал» об этом. Похоже, что единственный раз «!» («Имеет смысл MSBuild, кроме обычного текста, конечно, используется для использования в качестве« не-оператора »в атрибуте« Condition ». Пример:' Condition = "! ('$ (foo) '==' 1 ') "'. Возможно ли, что вы используете какой-то пользовательский инструмент, препроцессор или похожий, который интерпретирует «! (TargetPath)» как нечто иное, чем обычный текст? –