Visual Studio 2017扩展 - VSToolsPath无法正常工作

时间:2017-10-04 19:01:41

标签: visual-studio msbuild visual-studio-2017 visual-studio-extensions

我正在为VS 2017更新一个旧的Visual Studio扩展。它可以在我的本地计算机上从Visual Studio和msbuild进行调试和发布。

这是我正在使用的msbuild命令行:

msbuild VxCop.sln /p:ToolsHome=C:\ProgramData\chocolatey\bin /p:Configuration=Release /p:Platform="Any CPU"  

但是,在使用相同命令行调用msbuild.exe的构建计算机(TFS Build 2010)上,它失败并显示this error

为了解决这个问题,我试图指定VSToolsPath。我尝试过各种各样的事情,例如改变.csproj中的VSToolsPath条目(这似乎没有考虑到因为这样做没有效果)并且还在命令行上传递它:

msbuild VxCop.sln /p:ToolsHome=C:\ProgramData\chocolatey\bin /p:Configuration=Release /p:Platform="Any CPU"  /p:VSToolsPath=Packages\Microsoft.VSSDK.BuildTools.15.1.192\tools\

这会导致一个非常奇怪的错误:

CopyFilesToOutputDirectory:                                                                                          
  Copying file from "obj\Release\SymCop.dll" to "bin\Release\SymCop.dll".                                            
  SymCop -> H:\src\tools\VisualStudioExtensions\Main\VxCop\source\SymCop\bin\Release\SymCop.dll                      
  Copying file from "obj\Release\SymCop.pdb" to "bin\Release\SymCop.pdb".                                            
Done Building Project "H:\src\tools\VisualStudioExtensions\Main\VxCop\source\SymCop\SymCop.csproj" (default targets).

Done Building Project "H:\src\tools\VisualStudioExtensions\Main\VxCop\VxCop.sln" (Build target(s)) -- FAILED.        

Done Building Project "H:\src\tools\VisualStudioExtensions\Main\VxCop\build.proj" (default targets) -- FAILED.       


Build FAILED.                                                         
    0 Warning(s)                                                      
    0 Error(s)                                                        

实际的扩展项目根本没有出现在日志中,并且没有,你知道,错误。但构建返回失败,返回代码非零,并且似乎没有构建vsix项目(缺少输出)

希望有人有一些建议

由于

编辑:

对于将来阅读此内容的人来说,问题似乎是同一个文件中有<Import>进一步向下,而不关心我对$(VSToolsPath)的更新。

更改导入修复了它:

 <Import Project="$(SolutionDir)\packages\Microsoft.VSSDK.BuildTools.15.1.192\tools\VSSDK\Microsoft.VsSDK.targets" 
 />

1 个答案:

答案 0 :(得分:3)

  

Visual Studio 2017扩展 - VSToolsPath无法正常工作

我根据您的脚本获得了与您相同的结果。将NuGet包<img *ngIf="imageUrl" [src]="imageUrl"> 安装到项目后,Microsoft.VSSDK.BuildTools将导入到项目文件中,打开项目文件,您可以在下面找到Microsoft.VSSDK.BuildTools.props

Import

然后打开这个道具文件,你可以注意下面的脚本片段:

<Import Project="..\packages\Microsoft.VSSDK.BuildTools.15.1.192\build\Microsoft.VSSDK.BuildTools.props" Condition="Exists('..\packages\Microsoft.VSSDK.BuildTools.15.1.192\build\Microsoft.VSSDK.BuildTools.props')" />

在这种情况下,NuGet包会使用<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Label="VSSDK_NuGet_Configuration"> <ThisPackageDirectory>$(MSBuildThisFileDirectory)..\</ThisPackageDirectory> <VSToolsPath>$(ThisPackageDirectory)\tools</VSToolsPath> <VsSDKInstall>$(VSToolsPath)\VSSDK</VsSDKInstall> <VsSDKIncludes>$(VsSDKInstall)\inc</VsSDKIncludes> <VsSDKToolsPath>$(VsSDKInstall)\bin</VsSDKToolsPath> </PropertyGroup> </Project> 覆盖值VSToolsPath。因此,MSBuild将跳过在项目文件的下一步中设置值设置:

$(ThisPackageDirectory)\tools

由于NuGet已设置值 <PropertyGroup> <MinimumVisualStudioVersion>15.0</MinimumVisualStudioVersion> <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> <NuGetPackageImportStamp> </NuGetPackageImportStamp> </PropertyGroup> ,因此$(VSToolsPath)的值将为 False 。此外,您可以添加目标以检查是否设置了值,例如:

Condition="'$(VSToolsPath)' == ''"

您会发现此值设置为:

  <Target Name="CheckVSToolsPath" BeforeTargets="Build">
    <Message Text="$(VSToolsPath)"></Message>
  </Target>

上面的摘要C:\Users\Admin\Documents\Visual Studio 2017\Projects\VSIXProject2\packages\Microsoft.VSSDK.BuildTools.15.1.192\build\..\\tools 的值已正确导入,我们无需在命令行上传递它。

经过深入调查,我发现上次错误的原因“MSB4226:导入的项目”(...)\ VSSDK \ Microsoft.VsSDK.targets“未找到”。是“VisualStudioVersion”的MSBuild属性未在构建服务器上设置

请参阅以下链接了解详细信息Building a VSIX extension with the Visual Studio 2017 Build Tools

  

具有完整Visual Studio 2017的计算机所执行的操作以及使用Build Tools 2017的计算机在打开开发人员命令提示符时执行的操作。由于我没有使用它,我将它作为参数传递给MSBuild脚本。它也可以在.csproj文件中定义,这是以前Visual Studio版本自动执行的操作,但最新版本没有。

因此要解决错误“MSBuild4226”,您应该在命令行上传递visual studio版本:

VSToolsPath

使用此命令行后,错误MSBuild 4226已解决。

希望这有帮助。