Почему VS2010 не оценивает свойства моего проекта?

#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) нет.