2014-12-19 47 views
6

我有一个加载任何解决方案(.sln)文件的VS 2013控制台应用程序 - 使用Roslyn编译其中的所有项目,并从编译模型中提取API使用信息。MSBuildWorkspace.OpenSolutionAsync在Visual Studio/v14.0中查找目标

我现在面临这个奇怪的问题 - 当我从Visual Studio 2013(使用Ctrl-F5或F5)运行应用程序时,一切正常。我能够编译东西并提取所有信息。 然而,当我打开命令行(CMD),并尝试从我收到以下错误运行此控制台应用程序:

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> Microsoft.Build.Exceptions.InvalidProjectFileException: The imported project " 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Impor 
When I run 

注意v14.0那里。为什么MSBuildWorkspace试图查看所需目标文件的v14.0目录?是否因为我安装了用于CTP的MSBuild工具和默认路径,而从简单命令行运行的东西已更改?

- 编辑 - 这里是进口

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 

不过,我怀疑这是用import语句这样做。如果我从“Visual Studio 2013的开发人员命令提示符”运行控制台应用程序.exe,一切都可以正常工作。

+0

向我们展示您的项目文件中的。 – SLaks

+0

我遇到了同样的问题。你能解决这个问题吗? – ChaseMedallion

+0

不是一个真正的解决方案,但正如你提到它从VS命令提示符工作。作为一种解决方法,我创建了一个首先调用“C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat”的批处理文件,然后该应用程序运行良好。 –

回答

2

我在构建服务器上遇到了这个问题。当我针对/tv:14.0(工具版本14.0是Roslyn Build引擎)

我解决了它通过出去到C:\ Program Files文件(x86)\ MSBuild \ Microsoft \ VisualStudio然后创建文件夹像v14.0 \ WebApplications

然后,我用Microsoft.WebApplication.targets(因为这是由Visual Studio 2015发布的)出去到我的系统中,并将该文件复制到构建服务器的新文件夹。

+0

/p:VisualStudioVersion=11.0工作,/p:VisualStudioVersion=12.0失败,所以我做了一个v12.0 \ WebApplications目录从v11.0 \ WebApplications复制它的内容,并且构建工作(不确定这实际上在做什么,但它工作) – Aligma

+0

您的构建服务器上是否安装了Visual Studio 2012?版本12实际上是Visual Studio 2013. – DoomVroom

6

您可以使您的Web应用程序项目自成一体,并且不需要通过将NuGet引用添加到MSBuild.Microsoft.VisualStudio.Web.targets来编译Visual Studio 2015。

+0

从开发机器复制/粘贴不是一个好的解决方案,这是一个很好的解决方案。 – silencedmessage

+0

我添加了这个参考,但现在一些其他第三方dll被列为“未找到”或“失踪”。建立在VS2015工作正常,但建设服务器抱怨这些第三方引用丢失。 Perplexed