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,我找到了错误输出的行。 我有详细的建立在我试图看到的地方,如果我能找到任何可以解决的问题。

没有。

我已经搜索了如何更改Package Source Manifest,我已经查看了Build Properties,我已经搜索了一个源清单,甚至是搜索源清单的内容,没有。 也许我看起来太难了或者我只是不知道该找什么。

关于如何解决这个问题以及导致这个问题的任何想法?

打开.csproj文件并查找任何重复的导入标记

在我的例子中,.csproj有两行,如下所示:

  

删除其中一个修复了问题。

在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 

关闭并重新打开解决方案对我来说很有用。

由于$ MSBuildExtensionsPath32 $导入不当,我遇到了同样的问题。 很明显, v10.0适用于VS2010,而你使用的是VS2012(v11.0)。

因此,将导入更改为:

  

对于其他,如果您有VS2013(v12.0) ,您可以将其更改为:

  

注意:如果您删除此行,如@giacomelli建议,您将无法使用定义自定义目标文件。

来自MSDN: MSBuildExtensionsPath32

http://msdn.microsoft.com/en-us/library/ms164309.aspx

在.NET Framework 4中引入:MSBuildExtensionsPath和MSBuildExtensionsPath32的默认值之间没有区别。 您可以将环境变量MSBUILDLEGACYEXTENSIONSPATH设置为非空值,以启用早期版本中MSBuildExtensionsPath的默认值的行为。 在.NET Framework 3.5和更早版本中,MSBuildExtensionsPath的默认值指向\ Program Files \或\ Program Files(x86)文件夹下的MSBuild子文件夹的路径,具体取决于当前进程的位数。 例如,对于64位计算机上的32位进程,此属性指向\ Program Files(x86)文件夹。 对于64位计算机上的64位进程,此属性指向\ Program Files文件夹。 不要在此属性中包含最终反斜杠。 此位置是放置自定义目标文件的有用位置。 例如,您的目标文件可以安装在\ Program Files \ MSBuild \ MyFiles \ Northwind.targets中,然后使用此XML代码导入项目文件中:

当我尝试在VS2012发布一个最初是VS2010项目的项目时,我想这发生在我身上。 因此,在VS2012中重建项目是一种治愈它的方法。 或者@Giacomelli提到,删除对v10.0目标的引用。 注意, V10.0 = VS2010v11.0 = VS2012

我在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-或者,not.aspx

我在VS2013中遇到了同样的错误,但只有当我尝试重建项目时才会这样。 下面我如何在我的条件下解决问题,我希望这对其他人也有用。

组态:

  • 我在解决方案中的单独项目中有我的打字稿文件。
  • 这些项目是为VS 2012迁移的。

原因 :当我单击Microsoft.Web.Publishing.targets文件中的错误时,我发现该项目正在使用这些文件的VS2012版本。 这是仅部分从VS2012迁移到VS2013的项目。

解决方案 :打开typescript项目(第一个卸载项目)搜索:

   12.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)  
  • 注释VSToolsPath行
  • 保存并关闭文件
  • 重新加载项目您可以从visual studio看到一个迁移屏幕,通知您该项目已升级。

    重建项目,现在应该工作

我只是有同样的问题,检查我的.csproj文件,我发现没有错,没有重复导入 – 没有。

绊倒30分钟后,我通过打开我的.csproj文件并重新安排标签来修复它。

最初我将它们全部移动到顶部,但是收到一条错误消息,表明没有定义OutputPath,然后我将它们全部移动到它们定义的位置下方并且一切正常。 所有这些除外:

最有可能从文件底部移动NuGet.targets实际上修复了它。 我不知道,也不想浪费更多时间。

希望这有助于某人。