繁体   English   中英

体系结构层图验证在.Net Core中不起作用

[英]Architecture layer diagram validation not working in .Net core

我正在尝试建立一个简单的体系结构层图,以验证我们是否通过使用来自不正确层的名称空间/ dll违反了分层规则。

我设置了一个简单的解决方案,该解决方案具有一个控制台应用程序和4个dll(均使用.Net Core)。 控制台应用程序调用Dll1,Dll1调用Dll2,Dll2调用Dll3,依此类推。然后,我设置了一个图层图以强制执行此分层,并尝试将控制台应用程序调用到Dll 4,并期望得到错误。 但是,我没有。

如果我将其更改为使用Windows窗体应用程序(而不是.net核心控制台应用程序)并将所有dll都更改为.net标准,则执行层图时会出现错误。

我尝试将Microsoft.DependencyValidation.Analyzers NuGet程序包添加到.net核心控制台应用程序,但这仍然行不通。 .Net Core中有问题吗? 还是我想念的东西?

我不能相信这个答案,但是我发现这个解决方案埋在GitHub中。 手动解决方法在github <中列出。 它使依赖验证图在dotnet核心中对我来说运行良好。

依赖关系验证对于旧式MSBuild项目效果很好,并且它似乎不适用于新式MSBuild项目的唯一原因是,依赖关系验证设计器不会添加NuGet包和指向模型文件的链接,因为它不会添加将新型项目识别为C#/ VB项目。

这纯粹是一个IDE问题-​​依赖关系验证设计器不知道新型C#和VB项目类型的GUID,因此它没有显示固定项目文件的金条。 底层的验证机制仅使用Roslyn分析器和链接文件,MSBuild15完全支持这两种方法。

手动解决方法:对于要验证的每个.Net Standard / Core项目:

添加对Microsoft.Dependency.Validation.Analyzer NuGet包的引用将图层图添加为具有AdditionalGroups的ItemGroup类型的链接文件

例如

 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <!-- Add support for Layer validation --> <ItemGroup> <PackageReference Include="Microsoft.DependencyValidation.Analyzers" Version="0.9.0" /> <!-- Include the layer model as an additional file that will be passed to the analyzer /> <AdditionalFiles Include="..\\LayerTest1\\DependencyValidation1.layerdiagram"> <Link>DependencyValidation1.layerdiagram</Link> <Visible>False</Visible> </AdditionalFiles> </ItemGroup> </Project> 

背景

依赖关系验证引擎在VS2017中进行了重写,以使用Roslyn分析器,而不是单独的命令行可执行文件。 这就意味着现在每个要验证的代码项目都需要引用包含分析器的NuGet包,以及指向图层模型文件的指针。 这需要作为链接文件添加,因此该模型在所有项目之间仅共享一个副本,并且它必须属于AdditionalFiles ItemGroup,因为这是Roslyn用来将其他配置传递给分析器的机制。

(此外:另一个含义是,在IDE中可靠地查看所有依赖项验证错误的唯一方法是重建解决方案。否则,VS将尝试不构建未更改的项目,因此不会调用Roslyn分析器- >未产生验证错误)。

“项目需要更新”金条

如果解决方案包含依赖关系验证图,则Visual Studio IDE中的依赖关系验证设计器将扫描解决方案以查找其识别为包含C#或VB代码的项目类型,并检查这些项目是否包含分析器NuGet参考以及模型的链接。文件。 如果没有,则将显示“需要更新一个或多个项目以执行依赖关系验证”金条。

但是,依赖性验证设计器仅了解旧式C#和VB项目类型(分别为GUID FAE04EC0-301F-11D3-BF4B-00C04F79EFBC和F184B08F-C81C-45F6-A57F-5ABD9991F28F)。 它不知道新式的C#和VB项目(9A19103F-16F7-4668-BE54-9A1E7A4F7556和778DAE3C-4631-46EA-AA77-85C1314464D9),因为它们是在VS2017 RTM之后发布的。

https://docs.microsoft.com/zh-cn/visualstudio/modeling/layer-diagrams-reference?view=vs-2017有注释:

Visual Studio 2017中的.NET Core项目不支持依赖关系图。

在David给出的答案的基础上,还可以将Directory.Build.props添加到具有以下内容的解决方案根文件夹中:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Add support for Layer validation -->
  <ItemGroup>
    <PackageReference Include="Microsoft.DependencyValidation.Analyzers" Version="0.10.0" />

    <!-- Include the layer model as an additional file that will be passed to the analyzer /> -->
    <AdditionalFiles Include="$(MSBuildThisFileDirectory)Architecture\DependencyValidation.layerdiagram">
      <Link>DependencyValidation1.layerdiagram</Link>
      <Visible>False</Visible>
    </AdditionalFiles>
  </ItemGroup>
</Project>

这会将依赖性验证分析器和图表添加到解决方案中的所有项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM