【问题标题】:VS 2013 and MSBuildVS 2013 和 MSBuild
【发布时间】:2014-05-06 14:17:38
【问题描述】:

我最近升级到 Visual Studio 2013,在使用 MSBuild(API 或带有命令行参数的可执行文件)进行外部构建时导致出现背靠背问题

问题 #1 使用 MSBuild 构建时,它不会生成我们的单元测试所需的假程序集,这会导致构建失败。 Visual Studio 中的一个简单构建会暂时解决此问题,直到需要生成新的假程序集。

问题 #2 运行代码分析时,会出现以下问题:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis\Microsoft.CodeAnalysis.targets(284,5): 
error MSB4127: The "CodeAnalysis" task could not be instantiated from the assembly "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis\.\FxCopTask.dll". 

Please verify the task assembly has been built using the same version of the Microsoft.Build.Framework assembly as the one installed on your computer and that your host application is not missing a binding redirect for Microsoft.Build.Framework. Unable to cast object of type 'Microsoft.Build.Tasks.CodeAnalysis' to type 'Microsoft.Build.Framework.ITask'.

我的机器上只安装了 Visual Studio 2013,显然安装旧版本可以解决问题,但这不是我能做的。 (VS 2013 附带了自己的 MSBuild 12.0,它与之前的 MSBuild 位于不同的目录中)。

我不确定为什么 Visual Studio 的行为与 MSBuild 有任何不同,我只是像这样指向解决方案文件...

msbuild.exe "path\solution.sln" /property:Configuration=Debug

【问题讨论】:

    标签: visual-studio msbuild visual-studio-2013


    【解决方案1】:

    因此,Visual Studio 2013 附带了一个新版本的 MSBuild,即 MSBuild 12.0。安装后,它会更改路径,以便默认使用新版本。

    看起来您的解决方案使用 Visual Studio 2012 编译,您可以指定 msbuild.exe 的完整路径,例如

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild "path\solution.sln" /property:Configuration=Debug

    或通过在执行 msbuild 之前运行以下命令来设置 Visual Studio 2012 环境变量

    "%VS110COMNTOOLS%"\vsvars32.bat // VS2012 环境变量

    编辑:使用 MSbuild 12.0 程序集“C:\Program Files (x86)\MSBuild\12.0\Bin\”修复了代码分析错误的问题。

    【讨论】:

    • 我没有这个目录%VS110COMNTOOLS%。此外,如果我使用的是 C# MSBuild API,我看不到任何更改被调用的 MSBuild 可执行文件的方法。当我在 VS 2013 中构建(成功运行)时,我假设它正在调用 MSBuild 12,除非工具版本覆盖它(设置为 4.0)。
    • 好的,该文件夹只有在您安装了 Visual Studio 2012 时才会出现。如果您以编程方式调用 MSBuild,请将工具集类的 ToolsVersion 设置为 4.0 msdn.microsoft.com/en-us/library/…
    • 我尝试使用命令行参数和 C# API 中的工具集设置 ToolsVersion。似乎都无法解决问题。我还尝试使用“VisualStudioVersion”属性解决了我遇到的另一个问题。
    • 奇怪。那应该行得通。请参阅此“msdn.microsoft.com/en-us/library/bb383985.aspx”我没有尝试使用 MSBuild API,但使用命令行,它工作正常。你能告诉我你使用的是什么命名空间吗?
    • 我找到了 12.0 程序集,它解决了代码分析错误“C:\Program Files (x86)\MSBuild\12.0\Bin\”的问题如果您将此信息添加到您的答案中我会将其标记为已接受。感谢您的帮助。
    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多