是否可以在使用旁边显示包版本号?

时间:2017-11-10 00:53:20

标签: c# .net reference visual-studio-2017 version

假设在我的* .cs文件的顶部,我包含了一些依赖项:

using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

是否也可以在此处显示版本号,如下所示?

using System; //1.0.1
using System.Collections.Generic; //22.0.1
using System.IdentityModel.Tokens.Jwt; //3.56.2
etc

1 个答案:

答案 0 :(得分:2)

不,你不能。这是因为C#和.NET不像Java,TypeScript和其他语言,其中命名空间,包和库的概念组合在一起 - 在.NET中它们是完全独立的:多个包可以包含相同的库DLL文件和多个库DLL可以为共享和不同的命名空间做出贡献。

例如,System命名空间的成员位于mscorlib.dllSystem.dllSystem.Core.dll等。这些程序集都不属于任何特定程序包,因为它们是CLR实现中BCL的一部分。此外,任何人都可以在namespace System中自由声明自己的类型。

关于“软件包”:CLR完全没有意识到它们:它们是设计时的关注点;相反它所关心的是要链接的DLL文件。您根本不必使用NuGet软件包(.NET开发人员在没有内置软件包管理器的前13年中幸存下来。)

Note that NuGet allows you to have multiple DLL files a single package,并且包作者不需要“拥有”(合法或其他)包含在其中的DLL,这意味着多个NuGet包可以共享相同的程序集DLL,并且这些DLL可以共享命名空间。

我对你的这些话感到疑问:

  

我包含了一些依赖项:

请记住,C#不是TypeScript - 尽管语法上有相似之处(比如C与C ++相比)它们是非常不同的 - 将命名空间导入称为“包含依赖项”是不合适的 - 它只是语法 - 而在TypeScript中语句import { Foo } from './bar'不仅仅是语法,因为它将调用运行时平台的包/模块导入系统,而C#中的using是一个完全 inert 语句,只是简单地节省了你的输入每次使用标识符时global::The.Full.Namespace.Name