【问题标题】:NuGet packages how to know their `using` directive?NuGet 包如何知道他们的`using`指令?
【发布时间】:2020-02-01 19:59:38
【问题描述】:

一点背景。我对 NuGet 包管理器系统比较陌生,但到目前为止我已经安装了一些包。

我对 NuGet 的疑问是,我们如何知道如何使用 using 指令引用已安装的包?

我知道 NuGet 包在 NuGet 包管理器中有描述。但是,它们并不总是显示如何导入包。所以我主要是在谷歌上搜索我安装的包的示例,看看是否有一个示例显示using 指令是如何导入该包的。

最近我安装了包Selenium.WebDriver.PhantomJS.Xplatform 我很难在网上找到显示包所在位置以及如何导入它的示例。

【问题讨论】:

  • using Selenium.WebDriver.PhantomJS.Xplatform; 放在代码文件的顶部会发生什么?
  • 为了清楚起见,您不会使用 using 来“导入”任何内容。 Using 只是在使用特定类型时不必输入整个命名空间的简写。如果您有使用 NuGet 包中的类型的代码,那么您已经知道它们在哪个命名空间中。如果您没有这样的代码,那为什么还要导入 NuGet 包?
  • 我不会将此作为答案发布,但您可以尝试 NuGet Package Explorer。这可能接近您的需要。
  • 您好朋友,CodeCaster 的回答是否有助于解决这个问题?或者您可以添加self-answer 以分享您找到的有用信息和解决方法,只是一个提醒:)
  • @LanceLi-MSFT 我无法引入命名空间的问题是because the .NET language bindings marked the PhantomJS driver classes are deprecated in 3.11。非常感谢这里所有给出的答案确实帮助了我并解决了我的问题。

标签: c# visual-studio .net-core nuget nuget-package-restore


【解决方案1】:

问题在于,NuGet 包可以包含零个或多个程序集,可以添加作为对安装它的项目的引用。所以包和程序集之间没有一对一的关系;命名空间和程序集之间也不存在(一个程序集可以包含多个命名空间,或者同一个命名空间可以被多个程序集使用),因此包名和其中的程序集名称之间也不存在,也不存在其中的命名空间。

所以:你必须知道你在做什么。您选择安装Selenium.WebDriver.PhantomJS.Xplatform 是有原因的。一定有人告诉过你,或者你一定在某处读过它,你应该这样做。

当你听到或读到“你应该安装包Foo!”的情况时,该来源还应该为你提供如何使用其中包含的类型的示例包。这就是您应该阅读要导入哪些命名空间才能这样做的地方。

有些库也不需要任何代码即可运行;它们是 other 库的插件式添加,您应该已经拥有这些库以便使用它们。

【讨论】:

    【解决方案2】:

    通常 nuget 包有一个 github 存储库或者一个网站。 有时你可以找到例子,有时你必须通过源代码。

    我去了他们的 Github 存储库,发现他们使用的命名空间之一是:OpenQA.Selenium

    你可以查看他们的源代码here

    【讨论】:

      【解决方案3】:

      当我使用 using 指令时,它会告诉我类型或命名空间 名字...

      以上都描述了关于如何知道using指令的细节,所以添加一些细节来说明为什么nuget不负责它,VS中的什么负责它以及Intellisense(选项) 可以为我们做。

      NuGet 包如何知道它们的using 指令?

      VS 中的 Nuget 只是一个 Package Manager,它不会知道 using 指令。

      对于大多数 nuget 包,它们至少包含一个程序集,当您使用该包时,实际上您添加了对包中的程序集的引用。所以它相当于你有一些由某人开发的程序集,然后你在你的项目中本地引用它们(add=>reference=>browse)。所以在这种情况下,Nuget 将不知道如何使用带有 using 的程序集...

      (这里我们只是谈谈包中的程序集,nuget 包从它的 install.ps1 中获得了更多的优势,构建内容...)

      在 VS 中实际为您执行此操作的是 Intellisense,它负责在代码编辑器中识别您的 using 语句,并帮助提供快速信息建议。(添加使用命名空间,导入引用...)

      你说的函数是Intellisense,不是Nuget,Intellisense用来检查你的using指令是否正确,它会搜索你使用的命名空间是否正确存在于引用的程序集中,但它只会显示错误(如果找不到)或正确,它不会告诉您如何使用程序集以及其中定义的命名空间!这是您需要通过源代码或研究示例的内容,如 VyacheslavCodeCaster 已回答。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        • 1970-01-01
        • 1970-01-01
        • 2022-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多