VS2012 $(存在)只接受标量值

时间:2013-08-01 23:36:25

标签: c# visual-studio-2012 .net-4.5

好的,这更多的是构建错误,而不是编程错误。我从来没有太多理由让我的手弄脏构建,所以这个错误令我感到困惑。

我尝试使用google搜索此错误但收效甚微,回复要么不存在,要么不可理解或不适用。

错误是:

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,我搜索了一个源清单,甚至是搜索源清单的内容,没有。也许我看起来太难了,也许我只是不知道该找什么。

有关如何解决此问题及其原因的任何想法?

7 个答案:

答案 0 :(得分:28)

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

在我的情况下,.csproj有两行:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio
\v10.0\WebApplications\Microsoft.WebApplication.targets" />

删除其中一个解决了问题。

答案 1 :(得分:13)

在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

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

答案 2 :(得分:8)

由于 $ 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设置为a   非null值,以启用默认值的行为   早期版本中的MSBuildExtensionsPath。在.NET Framework 3.5中   早些时候,MSBuildExtensionsPath的默认值指向   \ Program Files \或\ Program下的MSBuild子文件夹的路径   文件(x86)文件夹,取决于当前进程的位数。   例如,对于64位计算机上的32位进程,此属性   指向\ Program Files(x86)文件夹。对于64位进程   64位机器,此属性指向\ Program Files文件夹。做   不包括此属性的最终反斜杠。这个位置是   放置自定义目标文件的有用位置。例如,你的目标   文件可以安装在\ Program   Files \ MSBuild \ MyFiles \ Northwind.targets然后在项目中导入   使用此XML代码的文件:

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我在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

答案 5 :(得分:0)

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

<强>配置:

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

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

<强>解决方案: 打开打字稿项目(第一个卸载项目) 搜索:

      <PropertyGroup>
        <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
        <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
      </PropertyGroup>
  • 注释行VSToolsPath
  • 保存并关闭文件
  • 重新加载项目您可以看到迁移 来自visual studio的屏幕通知您该项目已升级。

    重建项目,现在应该正常工作

答案 6 :(得分:-1)

我刚遇到同样的问题并检查我的.csproj文件我发现没有错,没有重复导入 - 没有。

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

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

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

希望这有助于某人。