【问题标题】:What is Microsoft.DependencyValidation.Analyser and why does Visual Studio 2017 force install the package?什么是 Microsoft.DependencyValidation.Analyser,为什么 Visual Studio 2017 强制安装包?
【发布时间】:2017-04-06 01:42:22
【问题描述】:

我刚刚安装了 Visual Studio 2017(在新的 Windows 10 VM 上),为 2015 年的升级路径做准备。我们现有的项目使用 .Net 4.5.2。 (ASP.NET 经典/非核心)

VS 2017 似乎坚持向我当前解决方案中的每个项目添加 Microsoft.DependencyValidation.Analyser 包依赖项。

这个依赖是什么? 为什么被强行进项目?撤消结帐无济于事,它会立即返回并再次添加。 如果我签入带有更改的 package.config 文件,假设团队成员没有进行任何更新,它会破坏 VS2015 吗?

【问题讨论】:

    标签: c# asp.net visual-studio visual-studio-2017


    【解决方案1】:

    好吧,事实证明 Visual Studio 的深色 UI 模式已经超越了鲨鱼。

    以下是Microsoft.DependencyValidation.Analyzer 如何神奇地安装的高度戏剧化的版本……几乎是神奇的。 (也有我上面问题的答案)。

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

    你是做什么的?单击更新(认为您的 Nuget 包正在被下载......吸盘!!!)BOOM!

    30 分钟后,您的所有 63 个项目都已签出,并且它们似乎具有相同的 package.config 更改。

    你去 WUT。尝试撤消结帐...对不起队友VS让你回来了...它恢复代码,重新加载项目并再次添加依赖项)。

    你首先没有意识到发生了什么。你愤怒,你咆哮你重复同样的事情一个小时,最后你在半夜把你的笔记本电脑扔到窗外,痛哭。

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

    这一次您更仔细地阅读了黄色小标签并产生了怀疑,因此您没有点击更新按钮。您单击将您带到一个通用页面的链接,您必须使用 Bing err Ctrl+F 来查找主题,这只是一个通用博客文章。尽管如此,一切都很好。然后它就知道发生了什么。颤抖着,感谢从破碎的窗户吹来的冷风,但欣喜若狂的是你已经“修复”了它,你把所有东西都抛到了空中,就这样结束了。

    第二天早上,您再次启动 Visual Studio。您不加载任何解决方案。相反,您打开源代码管理资源管理器,撤消检查所有内容,然后欢呼,一切都恢复了,不再对您的解决方案进行烦人的更改。

    高兴和哭泣(成功的喜悦或因屏幕破裂和从笔记本电脑中溢出的内脏而感到悲伤)打开您的解决方案,然后 WHAM!那个奇怪的黄色小警告又回来了……你站在那里不知所措……你在尖叫……在你的脑海里……为什么-为什么-为什么?我有一个 3 人的开发团队,我可以直接走到某人面前告诉他们,你不应该添加那个引用,因为它打破了一种深奥的模式。但是不...我已经为 MSDN 许可证支付了数百万英镑,因此我的“企业”软件将坚持做一些事情来

    • 为团队中的其他人打破一切(VS2017 Dependency voodoo 与 VS2015 版本不同)
    • 让您的虚拟机慢下来(实际上是内存不足并崩溃了两次,只是在尝试构建)。
    • 并给我比我关心的更多的错误消息。实际上,我不再查看错误面板了,因为我无法判断 Visual Studio 是认真对待错误还是只是因为应用程序似乎可以工作而拉扯我的链(Yay Razor 语法检查!!!)

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

    咆哮结束

    如果 Visual Studio 的任何人读到这里,这就是我想要的 Visual Studio(20 年后)

    1. 快速加载(是的,我的解决方案中有 63 个项目,我希望它们快速加载,不,我不会将它们分成不同的解决方案)
    2. 快速编译(C# 和 Typescript 是我使用的,但你明白了)我有无数 GB 的内存,使用它!
    3. 一致的 Intellisense(自动完成,也许可以从 VSCode 中吸取教训?) 其他任何需要额外花费几分之一秒的事情都会破坏我的工作效率,我不希望它打开,所以请让开!

    20 年了,我想我不应该屏住呼吸!

    附:我确实设法找到了一个设置来禁用该警告,但我认为实施该属性的人忘记告诉其他建筑物中正在执行解决方案资源管理器的人,所以它不起作用。

    【讨论】:

      【解决方案2】:

      如果您有一个数据访问项目,该项目应该完全不依赖于数据持久性框架(如 Entity Framework、ADO.NET 或其他技术),那么您如何确保没有一行代码写哪个依赖于那些依赖?您可以编写接口,使其完全不可知,但您如何阻止开发人员添加对 ADO.NET 的引用?

      这就是Microsoft.DependencyValidation.Analyser 将为您做的事情。当您构建时,它将分析所有项目并确保它不依赖于您指定的程序集。

      这可以确保您的架构不仅仅是一个漂亮的图表,而且您的开发人员实际上会遵循它。这不仅限于 ADO.NET 和其他主要程序集,还包括您自己构建的程序集。

      您可以告诉 Visual Studio 在架构损坏或编译失败时发出警告。

      这并不是什么新鲜事,而且已经存在,但我猜 VS 2017 让执行此类规则变得更加容易。这是否是一个好主意,取决于项目。如果我正在编写一个快速的一次性应用程序或 POC,那么我会将其关闭。但是对于需要数月开发和数月至数年维护的项目,它可能非常有用。但是,有些人可能不同意我的观点。重要的一点是,如果我们需要它,它就可以作为一种工具存在。

      更多信息here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 2019-12-27
        • 1970-01-01
        相关资源
        最近更新 更多