【问题标题】:VS2012 $(exists) only accepts scalar valuesVS2012 $(exists) 只接受标量值
【发布时间】:2013-08-01 23:36:25
【问题描述】:

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

我尝试在谷歌上搜索此错误,但结果很少,响应要么不存在、难以理解或不适用。

错误是:

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 并找到了出错的行。我有详细的构建,我试图查看是否可以找到任何我可以解决的问题。

什么都没有。

我已经用谷歌搜索了如何更改包源清单,我查看了构建属性,我搜索了源清单,甚至搜索了源清单,什么都没有。也许我看起来太努力了,或者我只是不知道要寻找什么。

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

【问题讨论】:

  • [same path];[same path] 是问题,只能有一个路径。
  • 你能得到$(PackageSourceManifest) 的解析结果吗?
  • 最后,我刚刚创建了一个新项目。它现在编译得很好。我假设在 Visual Studio 版本和框架版本之间进行转换,有些事情搞砸了。

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


【解决方案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
    

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

    【讨论】:

    • 为我工作。谢谢!
    • 2015 - 也为我工作。删除本地数据库文件后,我开始遇到此问题
    • 也为我工作。干杯
    【解决方案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 的默认值。 您可以将环境变量 MSBUILLDLEGACYEXTENSIONSPATH 设置为 非空值启用默认值的行为 早期版本中的 MSBuildExtensionsPath。在 .NET 框架 3.5 中 更早之前,MSBuildExtensionsPath 的默认值指向 \Program Files\ 或 \Program 下 MSBuild 子文件夹的路径 Files (x86) 文件夹,取决于当前进程的位数。 例如,对于 64 位机器上的 32 位进程,此属性 指向 \Program Files (x86) 文件夹。对于 64 位进程 64 位机器,此属性指向 \Program Files 文件夹。做 不包括此属性的最后反斜杠。这个位置是一个 放置自定义目标文件的有用地方。例如,您的目标 文件可以安装在 \Program Files\MSBuild\MyFiles\Northwind.targets 然后导入项目 使用此 XML 代码的文件:

    【讨论】:

      【解决方案4】:

      我认为当我尝试在 VS2012 中 Web 发布一个最初是 VS2010 项目的项目时,这发生在我身上。所以在VS2012中重新创建项目是一种治愈它的方法。 或者正如@Giacomelli 提到的,删除对 v10.0 目标的引用。请注意,V10.0 = VS2010v11.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 中遇到了同样的错误,但只有当我尝试重建项目时。下面我如何在我的条件下解决问题,希望对其他人也有用。

          配置:

          • 我的打字稿文件位于解决方案的不同项目中。
          • 这些项目已迁移到 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 的屏幕,通知您项目正在升级。

            重建项目,现在应该可以工作了

          【讨论】:

            【解决方案7】:

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

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

            最初我将它们全部移到顶部,但收到一条错误消息,指出未定义 OutputPath,然后我将它们全部移到定义它们的位置下方,一切正常。所有这些,除了:

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

            希望这对某人有所帮助。

            【讨论】:

            • 对我来说,只需关闭、重新打开和重建项目即可。
            猜你喜欢
            • 1970-01-01
            • 2011-06-25
            • 1970-01-01
            • 2015-12-19
            • 1970-01-01
            • 2013-10-16
            • 1970-01-01
            • 2012-05-30
            相关资源
            最近更新 更多