架构层图验证无法在.Net核心

时间:2018-04-24 13:52:03

标签: c# .net

我正在尝试设置一个简单的架构层图,以验证我们不会通过使用来自错误层的命名空间/ dll来破坏我们的分层规则。

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

如果我将其更改为使用Windows窗体应用程序(而不是.net核心控制台应用程序)并将所有dll更改为.net标准,那么我确实会收到强制执行图层图的错误。

我已经尝试将Microsoft.DependencyValidation.Analyzers NuGet包添加到.net核心控制台应用程序,但这仍然无效。这是.Net Core中的一个问题吗?或者我缺少的东西?

3 个答案:

答案 0 :(得分:3)

我对这个答案不以为然,但是我发现这个解决方案埋在GitHub中。  手动解决方法在>here in github<中列出。它使依赖验证图在dotnet核心中对我来说正常工作。

  

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

     

这纯粹是一个IDE问题-​​依赖关系验证设计器   不知道新的C#和VB项目类型的GUID,所以   它没有显示修复项目文件的金条。底层   验证机制仅使用罗斯林分析仪和链接文件,   这两个都在MSBuild15中得到完全支持。

     

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

     

添加对Microsoft.Dependency.Validation.Analyzer NuGet的引用   包将图层图添加为具有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,因为这是   罗斯林将其他配置传递给分析仪。

     

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

     

“项目需要更新”金条

     

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

     

但是,依赖项验证设计器仅了解   旧式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。

答案 1 :(得分:0)

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

  

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

答案 2 :(得分:0)

在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>

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