什么是Microsoft.DependencyValidation.Analyser,为什么Visual Studio 2017强制安装这个包?

12
我刚刚安装了Visual Studio 2017(在全新的Windows 10虚拟机上),为升级路径准备从2015开始。我们现有的项目使用.NET 4.5.2。(ASP.NET Classic/非Core)
似乎VS 2017坚持要将Microsoft.DependencyValidation.Analyser软件包依赖项添加到当前解决方案中的每个项目中。
这个依赖是什么?它为什么会被强制添加到项目中?撤销检出没有帮助,因为它会再次添加回去。如果我提交了包配置文件的更改,会不会破坏VS2015(假设团队成员没有进行任何更新)?
2个回答

21

好的,原来Visual Studio的暗黑UI模式已经过时了。

以下是一个高度戏剧化的版本,介绍了Microsoft.DependencyValidation.Analyzer如何神奇地安装...几乎是神奇的。 (也回答了我上面的问题)。

在一个全新的虚拟机中,您刚刚从源代码控制中下载了解决方案,并第一次启动它,您希望Nuget警告您需要重新加载依赖项。 因此,您快速阅读VS 2017上出现的消息,嘿,您已经使用它20年了,您希望它们不断改进,对吧,他们会支持您的吧? 好吧,在解决方案管理器的顶部,您看到“依赖项”和“已更新”的单词被突出显示为黄色。

Dependency validation message

你在做什么?点击更新(认为Nuget包正在下载...傻瓜!)BOOM!

30分钟后,你的63个项目都被检出,并且它们似乎有相同的package.config更改。

你感到困惑。尝试撤消检出...抱歉,VS已经为你解决了这个问题...它还原代码,重新加载项目并再次添加依赖项。

开始时你没有意识到发生了什么。你愤怒,你抱怨,你重复做了一个小时的相同事情,最终在半夜将笔记本电脑扔出窗外并痛哭流涕。

过了一会儿,你慢慢地站起来,把笔记本电脑拿回来,透过破裂的屏幕决定关闭Visual Studio,重新打开它,并尝试另一个分支的代码。

这一次你更仔细地阅读了小黄标签,并感到怀疑,所以你没有点击更新按钮。你点击链接,进入一个通用页面,在那里你必须使用Bing err Ctrl+F查找主题,这只是一个通用的博客文章。尽管如此,所有东西都构建得很好。然后你意识到发生了什么。因为从破碎的窗户中吹来的寒风,你感到发抖,但因为你已经“修复”了它而欣喜若狂,你把一切都扔在空中,然后结束了这个晚上。

第二天早上,你再次启动Visual Studio。你不加载任何解决方案。相反,你打开源代码控制资源管理器,撤销所有检出,万岁,一切都被还原了,没有什么烦人的更改了。
你开心地哭泣(成功的喜悦或破碎屏幕和笔记本电脑内部散落的零件的悲痛),然后打开你的解决方案,结果那个可怕的小黄色警告又回来了……你站在那里茫然不知所措……你在脑海中尖叫着……为什么呢?我有一个三人开发团队,我可以直接走到某个人跟前,告诉他们伙计,你不应该添加那个引用,因为它会破坏一个深奥的模式。但是不……我花了无数英镑购买MSDN许可证,因此我的“企业”软件将坚持做一些对团队中其他所有人都会产生影响的事情(VS2017的依赖关系魔法与VS2015版本不同),使我的虚拟机变得非常缓慢(它试图构建时实际上耗尽了内存并崩溃了两次),并给我带来更多的错误消息,而我却不在意。实际上,我不再看错误面板了,因为我分不清Visual Studio是认真对待一个错误还是只是在逗我开心,因为应用程序似乎可以工作(耶!Razor语法检查!!!)。

此时,你只是在哭泣……而你不知道为什么……

愤怒结束

如果来自 Visual Studio 的任何人都看到了这里,这就是我对 Visual Studio(20 年后)的期望:

  1. 快速加载(是的,我的解决方案中有 63 个项目,我希望它们能够快速加载,不,我不会将它们拆分成不同的解决方案)
  2. 快速编译(我使用 C# 和 Typescript,但你明白的)我有数十亿 GB 的内存,用它吧!
  3. 一致的智能感知(自动完成,也许可以借鉴 VSCode?)任何需要额外花费一点时间的东西都会破坏我的生产力,我不想启用它,请离开我的视线!

已经过去了 20 年,我想我不应该抱有期望了!

P.S. 我确实找到了一个设置来禁用那个警告,但我认为实现该属性的人忘记告诉解决方案资源管理器中的其他楼房的人,所以它不起作用。

enter image description here


8
如果您有一个数据访问项目,它应该完全与数据持久化框架(如Entity Framework、ADO.NET或其他技术)无关,那么您如何确保没有一行代码依赖于这些依赖项?您可以编写接口,使其完全不可知,但是如何防止开发人员添加对ADO.NET的引用?
这就是Microsoft.DependencyValidation.Analyser为您做的事情。当您构建时,它将分析所有项目,并确保不依赖于由您指定的程序集。
这确保了您的架构不仅仅是一个漂亮的图表,而且您的开发人员实际上遵循它。这不仅限于ADO.NET和其他主要程序集,甚至包括您自己构建的程序集。
您可以告诉Visual Studio在架构被破坏时发出警告或失败编译。
这并不是什么新鲜事,早已存在,但我猜 VS 2017 让执行这样的规则更容易了。无论这是否是一个好主意,都取决于项目本身。如果我正在编写一个快速应用程序或 POC,那么我会关闭它。但对于需要数月开发和维护的项目来说,它非常有用。然而,有些人可能会不同意我的看法。重要的是,它作为一种工具存在,如果我们需要它,就可以使用它。

更多信息 在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接