当我今天尝试打开一个解决方案时,Visual Studio 2015 在解决方案资源管理器中用加载失败。“解决方案”输出窗口报告以下异常,每个项目一次:
C:\Users\Path\To\My\Project\Foo.csproj:错误:无法评估表达式“[System.IO.Path]::Combine("C:\Users\My Name\Documents\Visual Studio 2010\Projects", obj\Debug\Fakes)”。路径中的非法字符。C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Fakes\Microsoft.QualityTools.Testing.Fakes.targets
尝试打开更多解决方案时,我发现 Visual Studio 现在会针对它尝试打开的任何项目报告这些错误。
我重置了所有 Visual Studio 设置,但问题并未解决。Microsoft Fakes 似乎是一个用于测试目的的模拟框架(如果我错了,请纠正我);这些项目不包含任何测试,我也没有故意访问过 Fakes。
自昨天以来,我没有发现与 Visual Studio 或相关解决方案相关的任何更改,当时一切仍正常运转。我并行安装的 Visual Studio 2010 仍能正常工作,并且可以加载解决方案和项目。
作为实验,我编辑了错误消息中提到的文件,Microsoft.QualityTools.Testing.Fakes.targets,特别是以下这一行:
<FakesIntermediatePath>$([System.IO.Path]::Combine('$(ProjectDir)','$(IntermediateOutputPath)Fakes'))</FakesIntermediatePath>
我'$(ProjectDir)'
用一个常量字符串替换了;这会让 Visual Studio 再次加载项目,但由于我不确定此脚本的用途是什么,所以我犹豫是否要使用此解决方法。这也表明的值$(ProjectDir)
可能包含无效字符,我无法确认。我还想知道为什么 Fakes 中间目录可能直接放在 Visual Studio 放置其项目的目录中。
答案1
在输入问题时我发现了问题的原因。
虽然我昨天没有更改任何 Visual Studio 设置,但我所做的是添加了一个名为的环境变量,PROJECTDIR
该变量指向我的 Visual Studio 2010 项目目录。脚本必须访问该变量而不是它自己的变量。重命名环境变量后,Visual Studio 能够再次加载项目。
这就是 Fakes 尝试在我的目录中设置中间目录Documents\Visual Studio 2010\Projects
而不是实际项目的子目录中的原因。事后看来这似乎很明显,但当时我只是没有在系统环境变量和“目标”脚本使用的变量之间建立联系。
我仍然在这里发布此信息,因为这种互动通常很难被发现,也许此信息将来可以为某些人省去一些麻烦。