2012-03-05 4 views
5

В чем разница между ссылками на свойства, такими как $ (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». Это, однако, не работает для других свойств, которые я определил.

Любая помощь очень ценится!

+1

Интересно. Можете ли вы опубликовать полный proj-файл, демонстрирующий это поведение? Я попытался воспроизвести его, расширив образец «ConsoleApplication1.csproj», но не смог. 'Echo! (TargetPath)' просто печатает "! (TargetPath)". –

+0

Если что-то не задокументировано, вы не должны использовать его вообще. –

+2

Я размышлял и «изучал» об этом. Похоже, что единственный раз «!» («Имеет смысл MSBuild, кроме обычного текста, конечно, используется для использования в качестве« не-оператора »в атрибуте« Condition ». Пример:' Condition = "! ('$ (foo) '==' 1 ') "'. Возможно ли, что вы используете какой-то пользовательский инструмент, препроцессор или похожий, который интерпретирует «! (TargetPath)» как нечто иное, чем обычный текст? –

ответ

1

Просто переписав наш процесс сборки, я могу честно сказать, что я никогда не использовал! ссылаться на что-либо, все, что я когда-либо использовал для этого символа, это сказать «НЕ», как в булевом операторе.

Фактически я не могу найти это использование нигде в документации или воспроизвести описанное вами поведение.

Я сильно подозреваю, что это неверный/поддерживаемый синтаксис для ссылки на что-либо.

Смежные вопросы