VS2012 $(существует) принимает только скалярные значения
Хорошо, это скорее ошибка сборки, чем ошибка программирования. У меня никогда не было никаких оснований, чтобы мои руки были грязными со сборками, поэтому эта ошибка меня озадачивает.
Я пробовал эту ошибку с ошибкой с небольшими результатами, ответы либо несуществующие, непонятные, либо неприменимые.
Ошибка:
The "exists" function only accepts a scalar value, but its argument
"$(PackageSourceManifest)" evaluates to "[same path];[same path]" which is not a
scalar value. C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\
v10.0\Web\Microsoft.Web.Publishing.targets
Во всяком случае, я ворвался в Microsoft.Web.Publishing.targets, и я нашел строку, где это ошибка. У меня есть многословная сборка, где я пытался увидеть, могу ли я найти что-нибудь, что торчало для меня, что я мог бы исправить.
Ничего.
У меня есть googled, как изменить Пакет Source Manifests, я посмотрел в Build Properties, я искал источник-манифест или даже что-то, что говорит о манифесте источника, ничего. Может быть, я слишком много смотрю или, может быть, просто не знаю, что искать.
Любые идеи о том, как исправить это и что вызвало это?
Ответы
Ответ 1
Откройте файл .csproj и найдите любой дублированный тег импорта.
В моем случае .csproj имел две строки:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio
\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Удалите одну из них, исправив проблему.
Ответ 2
Имел ту же проблему в VS 2012 -
Error 48 04115: The "exists" function only accepts a scalar value, but its argument "@(_UnmanagedRegistrationCache)" evaluates to "obj\TheQueueData.sqlproj.UnmanagedRegistration.cache;obj\TheQueueData.sqlproj.UnmanagedRegistration.cache" which is not a scalar value. C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets 1091 7 TheQueueData
Закрытие и повторное открытие решения сделали трюк для меня.
Ответ 3
У меня была такая же проблема из-за неправильного импорта $MSBuildExtensionsPath32 $. Очевидно, что v10.0 для VS2010, тогда как вы на VS2012 (v11.0).
Поэтому измените свой импорт на:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" />
Для других, если у вас VS2013 (v12.0), вы можете изменить его на:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" />
Примечание. Если вы удалите эту строку, например, @giacomelli, вы не сможете использовать свой целевой файл цели.
Из MSDN: MSBuildExtensionsPath32
http://msdn.microsoft.com/en-us/library/ms164309.aspx
Представлено в .NET Framework 4: нет никакой разницы между значения по умолчанию для MSBuildExtensionsPath и MSBuildExtensionsPath32. Вы можете установить переменную среды MSBUILDLEGACYEXTENSIONSPATH на ненулевое значение, чтобы включить поведение значения по умолчанию MSBuildExtensionsPath в более ранних версиях. В .NET Framework 3.5 и ранее значение по умолчанию для MSBuildExtensionsPath указывает на путь к папке MSBuild в папке \Program Files\или\Program Файлы (x86), в зависимости от битности текущего процесса. Например, для 32-битного процесса на 64-битной машине это свойство указывает на папку \Program Files (x86). Для 64-битного процесса на 64-бит, это свойство указывает на папку \Program Files. Делать не включают окончательную обратную косую черту в этом свойстве. Это место является полезное место для размещения пользовательских целевых файлов. Например, ваша цель файлы можно установить в \Program Файлы\MSBuild\MyFiles\Northwind.targets, а затем импортируются в проект файлов с помощью этого XML-кода:
Ответ 4
Я думаю, что это случилось со мной, когда я попытался опубликовать проект в VS2012, который первоначально был проектом VS2010. Поэтому воссоздание проекта в VS2012 - это способ его лечения.
Или как @Giacomelli упоминает, удаляя ссылку на цели v10.0. Обратите внимание, что V10.0
= VS2010
и v11.0
= VS2012
Ответ 5
У меня была аналогичная проблема в VS2013. У меня не было дубликатов. Решение, которое сработало для меня, - это очистка кеша Visual Studio. http://blogs.msdn.com/b/willy-peter_schaub/archive/2010/09/15/if-you-have-problems-with-tfs-or-visual-studio-flush-the-user-cache-or-not.aspx
Ответ 6
У меня такая же ошибка в VS2013, но только когда я пытаюсь перестроить проект. Ниже, как я решаю проблему в моих условиях, я надеюсь, что это также полезно для других людей.
Конфигурация:
- У меня есть мои файлы typescript в отдельных проектах в решении.
- Эти проекты были перенесены на VS 2012.
Причина:
когда я нажимаю на ошибку в файлах Microsoft.Web.Publishing.targets, я обнаружил, что проект использовал версию этих файлов VS2012. Это проекты, которые только частично переносятся из VS2012 в VS2013.
Решение:
Откройте проект typescript (первый проект разгрузки)
Поиск:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
- Комментировать строку VSToolsPath
- Сохранить и закрыть файл
-
Перезагрузка проекта Вы можете увидеть переход
экран из визуальной студии, уведомляющий вас о том, что проект был обновлен.
перестроить проект, теперь он должен работать
Ответ 7
У меня была такая же проблема и проверка моего файла .csproj. Я не нашел ничего плохого, никаких дубликатов импорта - ничего.
После спотыкания 30 минут я исправил его, открыв файл .csproj и переставив в него теги.
Сначала я переместил их всех на верх, но получил сообщение об ошибке, что OutputPath не определен, затем я переместил все их прямо под тем, где они были определены, и все сработало. Все они за исключением:
Скорее всего, перемещение NuGet.targets из нижней части файла было тем, что на самом деле зафиксировало его. Я понятия не имею, и не хочу тратить больше времени.
Надеюсь, это поможет кому-то.