Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 项目与软件包的C#VisualStudio依赖关系_Visual Studio_.net Core_Dependencies_Nuget Package - Fatal编程技术网

Visual studio 项目与软件包的C#VisualStudio依赖关系

Visual studio 项目与软件包的C#VisualStudio依赖关系,visual-studio,.net-core,dependencies,nuget-package,Visual Studio,.net Core,Dependencies,Nuget Package,试图理解visual Studio c#解决方案中项目的所有依赖项都是在哪里定义的。(编辑:这在.NetCore 3.1中) 对于依赖于同一解决方案中其他项目的解决方案中的项目,依赖关系似乎通过两种方式在依赖项目中定义: 在项目文件中 通过源代码中的using语句或命名空间前缀 但是,对于依赖于NuGet包的项目(NuGet包本身是同一解决方案中不同项目的依赖项),对NuGet包的依赖似乎仅以一种方式明确定义: 通过源代码中的using语句或命名空间前缀 依赖项目与任何其他项目之间似乎没有任何明

试图理解visual Studio c#解决方案中项目的所有依赖项都是在哪里定义的。(编辑:这在.NetCore 3.1中)

对于依赖于同一解决方案中其他项目的解决方案中的项目,依赖关系似乎通过两种方式在依赖项目中定义:

  • 在项目文件中
  • 通过源代码中的using语句或命名空间前缀
  • 但是,对于依赖于NuGet包的项目(NuGet包本身是同一解决方案中不同项目的依赖项),对NuGet包的依赖似乎仅以一种方式明确定义:

  • 通过源代码中的using语句或命名空间前缀
  • 依赖项目与任何其他项目之间似乎没有任何明确的依赖关系。但它是依赖的

    一个很好的例子是NLog的使用,其中NLog在一些init项目中定义,然后简单的命名空间引用允许解决方案中的任何项目使用它

    我一直试图重用其他解决方案中的项目,但遇到了这个问题。是的,很容易抓住,但我想了解这一切是如何运作的

    我的问题是:这种隐式依赖的规则是什么?nuget包是否必须在依赖于使用该包的项目的项目层次结构中的某个项目中定义?是不是我错过了一些解决方案级别的配置?为什么它们不同呢


    我已经搜索过了,但没能找到任何解释原因的东西,但也许我没找到。感谢并道歉如果这是一个愚蠢的问题

    我将尝试按照流程的顺序进行:

    nuget包只定义库的来源(通常从nuget.org联机,但您可以添加各种源),然后visual studio将该包下载到“Packages”文件夹中

    如果您通过Nuget软件包管理器添加了一个项目,那么该项目本身将引用packages文件夹中的该DLL。如果展开项目中的“引用”部分并双击引用,则可以看到实际库的位置


    Using语句只是将名称空间导入到您正在使用的.CS文件中,这样您就不必指定指向直接对象的整个路径(例如System.IO.file…。

    实际上有两件事

    首先,您的VS项目引用了一些nuget包和一些VS项目。nuget包包含一个或多个程序集,VS项目输出程序集。这意味着您可以告诉编译器在编译时要引用哪些程序集


    其次,在C#文件中使用语句可以避免写入完整的类型名

    System.Console.Writeline("Hello world!");
    
    vs

    请注意,编译器正在以下各项中搜索
    控制台

    • 引用的程序集的所有公共类型
    • 以及当前VS项目的所有公共或内部类型
    只要类型名

    • 前缀为
      系统。
    • 或以
      ABC作为前缀。
    • 或者根本没有前缀。这适用于未在命名空间中定义的类型。对于在匿名名称空间中定义的类型也可以这样说

    如果发现多个此类类型(如
    System.Console
    ABC.Console
    ),编译器将发出一个不明确的错误。

    应该指定.NetCore 3.1。在我能找到的项目中没有“参考”部分。
    using System;
    using ABC;
    ...
    Console.Writeline("Hello world!");