#visual-studio-2010 #msbuild
#visual-studio-2010 #msbuild
Вопрос:
У меня есть проект msbuild, который пытается создать глобальный корневой каталог таким образом:
<PropertyGroup>
<TheRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFile), theroot.txt))</TheRoot>
</PropertyGroup>
Я использую это для получения пользовательских настроек сборки:
<Import Project="$(TheRoot)buildTheBuild.settings" />
Иногда (я повторяю, иногда) VS2010 утверждает, что не будет загружать проект, потому что не может найти мой импортированный TheBuild.Настройки. Путь, о котором он сообщает, предполагает, что он не утруждает себя оценкой свойства перед поиском входных данных.
У MSBuild нет такой сложности.
Я должен подчеркнуть, что VS2010 сталкивается с этой проблемой лишь изредка; есть некоторые условия, при которых она обрабатывается просто отлично. К сожалению, я не смог определить, каковы эти условия.
Почему VS не может разобраться в моем свойстве?
Редактировать: если я успешно открою файл решения, а затем закрою его, внезапно это сработает: этот экземпляр VS может открыть любой из этих проектов. Не знаю, поможет ли это.
Ответ №1:
Я делал то же самое с довольно сложной сборкой, и она никогда не подводила. Единственное различие между вашим и моим заключается в том, что я использую $ (MSBuildThisFileDirectory), а «исходный» файл, который я использую, — это тот же файл, который будет импортирован, в вашем случае «TheBuild.настройки «вместо»theroot.txt «хотя я не понимаю, какое это имело бы значение.
Вы вообще замечаете это при редактировании файлов, когда решение открыто? Ваше объявление $ (TheRoot) находится в файле проекта или в импортированном файле? Это может иметь значение, поскольку IDE будет кэшировать импортированные файлы свойств.
Комментарии:
1. Обе эти строки находятся в .csproj, а не в каком-либо импортированном файле.
2. Будь я проклят, $ (MSBuildThisFileDirectory) работает там, где $ (MSBuildThisFile) нет.