VS2012$(存在)只接受标量值
本文关键字:标量 存在 VS2012 | 更新日期: 2023-09-27 18:25:57
好吧,这更像是一个构建错误,而不是编程错误。我从来没有太多的理由去搞构建,所以这个错误让我很困惑
我试过在谷歌上搜索这个错误,但收效甚微,这些回复要么不存在,要么无法理解,要么不适用。
错误为:
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,发现了它出错的地方。我在试图查看是否能找到任何我可以解决的问题的地方进行了详细的构建。
什么都没有。
我在谷歌上搜索了如何更改包源清单,我查看了构建属性,我搜索了源清单,甚至是说源清单什么都没有的东西。也许我找得太辛苦了,也许我就是不知道该找什么。
关于如何解决这个问题以及是什么原因造成的,有什么想法吗?
打开.csproj文件,查找任何重复的导入标记。
在我的案例中,.csproj有两条这样的行:
<Import Project="$(MSBuildExtensionsPath)'Microsoft'VisualStudio
'v10.0'WebApplications'Microsoft.WebApplication.targets" />
移除其中一个修复了问题。
在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
关闭并重新打开解决方案对我来说很有用。
我也遇到了同样的问题,原因是错误导入了$MSBuildExtensionPath32$。很明显,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:MSBuildExtensionPath32
http://msdn.microsoft.com/en-us/library/ms164309.aspx
在.NET Framework 4中引入:MSBuildExtensionPath和MSBuildExtensionPath32的默认值。可以将环境变量MSBUILDLEGACYEXTENSIONSPATH设置为非null值,以启用的默认值的行为早期版本中的MSBuildExtensionPath。在.NET Framework 3.5中和早期版本中,MSBuildExtensionPath的默认值指向''Program Files''或''Program下的MSBuild子文件夹的路径Files(x86)文件夹,具体取决于当前进程的位。例如,对于64位计算机上的32位进程,此属性指向''Program Files(x86)文件夹。对于64位计算机,此属性指向''Program Files文件夹。做不在此属性上包含最后一个反斜杠。此位置是放置自定义目标文件的有用位置。例如,您的目标文件可以安装在''ProgramFiles''MSBuild''MyFiles''Northwind.targets,然后导入到项目中使用以下XML代码创建文件:
我想这是在我尝试在VS2012中Web发布一个项目时发生的,该项目最初是VS2010项目。因此,在VS2012中重新创建该项目是解决问题的一种方法。或者,正如@Giacomelli所提到的,删除对v10.0目标的引用。请注意,V10.0
=VS2010
和v11.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-or-not.aspx
我在VS2013中遇到了同样的错误,但只是在我尝试重建项目时。下面我如何在我的条件下解决问题,我希望这对其他人也有用。
配置:
- 我在解决方案中的各个项目中都有我的打字脚本文件
- 这些项目是为VS 2012迁移的
原因:当我单击Microsoft.Web.Publishing.target文件中的错误时,我发现该项目使用的是这些文件的VS2012版本。这是仅部分从VS2012迁移到VS2013的项目。
解决方案:打开typescript项目(第一个卸载项目)搜索:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)'Microsoft'VisualStudio'v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
- 注释行VSToolsPath
- 保存并关闭文件
重新加载项目您可以看到迁移visualstudio的屏幕,通知您项目已升级。
重建项目,现在应该工作
我刚刚遇到了同样的问题,检查我的.csproj文件时没有发现任何错误,没有重复导入-什么都没有。
在跌跌撞撞的30分钟后,我打开.csproj文件并重新排列其中的标签,修复了它。
最初,我将它们全部移到顶部,但收到一条错误消息,即OutputPath未定义,然后我将所有它们都移到定义位置的正下方,一切正常。除以下内容外的所有内容:
很可能是从文件底部移动NuGet.targets才真正修复了它。我不知道,也不想浪费更多的时间。
希望这能帮助到别人。