构建服务器上的Visual Studio 2017依赖项验证项目

时间:2017-09-22 06:36:29

标签: .net visual-studio tfs msbuild visual-studio-2017

VS 2017 Enterprise中的新依赖关系验证功能需要在安装程序中检查其他组件。然后,它会升级您的.csproj个文件以包含Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets。在本地工作,但不在构建服务器上工作:

  

错误MSB4226:导入的项目" C:\ Program Files(x86)\ Microsoft   视觉   工作室\ 2017年\企业\的MSBuild \微软\ VisualStudio的\ V15.0 \ ArchitectureTools \ Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets"   没找到。另外,试图找到   " ArchitectureTools \ Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets"   在$(VSToolsPath) - " C:\ Program Files的后备搜索路径中   (86)\的MSBuild \微软\ VisualStudio的\ V15.0" 。这些搜索路径是   在" C:\ Program Files(x86)\ Microsoft Visual中定义   工作室\ 2017 \企业\的MSBuild \ 15.0 \ BIN \ msbuild.exe.Config&#34 ;.确认   声明中的路径是正确的,而那个   文件存在于其中一个搜索路径的磁盘上。

我们的构建服务器是Visual Studio Team Services,配置为使用最新版本的VS(即2017)。我们需要安装/配置什么才能使其正常工作?

2 个答案:

答案 0 :(得分:2)

仅Visual Studio Enterprise 2017才需要编辑模型文件。实际验证将在VS2017,VS2015 Update 2或更高版本的非企业版本以及未安装Visual Studio的生成计算机上运行。您只需要Microsoft.DependencyValidation.Analyzers NuGet软件包和模型文件。

Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets 文件是执行依赖关系验证的旧方法(VS2015和更早版本)的遗留物。如果您查看VS随附的目标的VS2017版本,您会看到所有目标都重新定义为Building/Rebuilding/Cleaning a dependency validation project is a no-op。 VS2017中提供的目标的唯一原因是避免破坏使用确实依赖于目标的旧层验证机制在VS2015中创建的解决方案。

如果您不是在VS2015和VS2017之间来回切换,则您的 .csproj 文件不需要导入这些目标。您可以删除import语句,或者如果要双向添加条件,则仅在目标存在的情况下才导入目标,例如

  <Import Project="$(VSToolsPath)\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets"
    Condition="Exists('$(VSToolsPath)\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets')" />

在构建服务器上,您可以仅将 .modelproj 文件从构建中排除。或者,您可以在 .modelproj 中调整导入,以使其在VS2017和VS2015中均可使用,但是如果目标不存在,导入也不会失败:

  <Import Project="$(VSToolsPath)\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets"
    Condition="Exists('$(VSToolsPath)\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets')" />

  <!-- In the .modelproj file, we need to define a Build target if we're not importing the modeling targets -->
  <Target Name="Build" Condition="!Exists('$(VSToolsPath)\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets')"/>

答案 1 :(得分:1)

您需要在构建代理上安装Visual Studio Enterprise,并确保还安装架构工具。与开发人员工作站上的相同。