26

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

我试过用谷歌搜索这个错误,结果很少,响应要么不存在,要么难以理解,要么不适用。

错误是:

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 并找到了出错的行。我有详细的构建,我试图看看我是否能找到任何对我来说很重要的东西,我可以修复。

没有。

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

有关如何解决此问题以及导致此问题的任何想法?

4

7 回答 7

29

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

就我而言,.csproj 有两行这样的:

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

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

于 2013-09-19T13:49:32.663 回答
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

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

于 2014-08-08T17:16:18.647 回答
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 的默认值没有区别。您可以将环境变量 MSBUILLDLEGACYEXTENSIONSPATH 设置为非空值,以启用早期版本中 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 代码导入项目文件中:

于 2014-05-08T08:55:21.817 回答
1

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

于 2014-01-04T15:44:23.297 回答
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

于 2015-05-31T01:48:29.693 回答
0

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

配置:

  • 我在解决方案中的不同项目中有我的打字稿文件。
  • 这些项目是为 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 行
  • 保存并关闭文件
  • 重新加载项目 您可以从 Visual Studio 中看到一个迁移屏幕,通知您项目已升级。

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

于 2015-10-06T15:30:18.317 回答
-1

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

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

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

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

希望这可以帮助某人。

于 2014-04-03T18:26:09.153 回答