好的,这更多的是构建错误,而不是编程错误。我从来没有太多理由让我的手弄脏构建,所以这个错误令我感到困惑。
我尝试使用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,我搜索了一个源清单,甚至是搜索源清单的内容,没有。也许我看起来太难了,也许我只是不知道该找什么。
有关如何解决此问题及其原因的任何想法?
答案 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
= VS2010
和v11.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中遇到了同样的错误,但只有当我尝试重建项目时才会这样。下面我如何在我的条件下解决问题,我希望这对其他人也有用。
<强>配置:强>
<强>原因强>: 当我点击Microsoft.Web.Publishing.targets文件中的错误时,我发现该项目正在使用这些文件的VS2012版本。这是仅部分从VS2012迁移到VS2013的项目。
<强>解决方案强>: 打开打字稿项目(第一个卸载项目) 搜索:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
重新加载项目您可以看到迁移 来自visual studio的屏幕通知您该项目已升级。
重建项目,现在应该正常工作
答案 6 :(得分:-1)
我刚遇到同样的问题并检查我的.csproj文件我发现没有错,没有重复导入 - 没有。
绊倒了30分钟后,我通过打开我的.csproj文件并在其中重新排列标签来修复它。
最初我将它们全部移到了顶部,但是收到了一条错误消息,表明没有定义OutputPath,然后我将它们全部移动到它们定义的位置下方并且一切正常。所有这些除外:
最有可能从文件底部移动NuGet.targets实际修复了它。我不知道,也不想浪费更多时间。
希望这有助于某人。