我按照instruction创建了新的.NET Core项目,并从cmd运行以下代码:

dotnet new
dotnet restore

第二个语句创建包含大量垃圾(不是真正的垃圾,而是大量依赖项、配置等)的project.lock.json.我假设这些依赖项是被分解成单独的NuGet包的.NET框架.

我的问题:

  1. 我的假设正确吗?
  2. 我是否可以通过删除不需要的NuGet包/依赖项来简化应用程序?
  3. 怎样

推荐答案

Update:project.json已替换为.csproj,作为项目的主要文件.NET标准项目.这个问题指的是PackageReference in NuGet 4.0年前的旧制度.

您可能偶尔仍会将project.lock.json视为构建过程中的一个工件,但应该忽略它.管理您需要的NuGet软件包.NET标准/.NET核心项目所依赖的任何一方

  • 直接编辑.csproj文件
  • 使用dotnet CLI(dotnet add package等)
  • 如果使用的是Visual Studio,请使用Package Manager GUI

Old answer留给后代:project.lock.json是由.NET工具来恢复项目的包.你不应该碰它或者把它判断进源代码管理.直接编辑project.json.

在包恢复过程中(dotnet restore),NuGet必须分析项目中的依赖关系,遍历their个依赖关系图,并计算出应该为您的项目和项目的依赖关系安装哪些包.

这不是一项微不足道的工作量,因此结果以project.lock.json为单位进行缓存,以使后续恢复更快、更高效.如果修改project.json并再次执行dotnet restore,将重新生成锁文件.

.net相关问答推荐

使用PowerShell在Windows容器内安装exe

";Make Async ValueTask/ValueTask方法分期分配发生了什么?

如何使用 awslocal 通过 localstack 中的 cloudwatch events/eventbridge 触发 lambda

在 Rx 中,处理线程安全是否是消费者(IObserver)的责任?

既然 .NET 有一个垃圾收集器,为什么我们需要终结器/析构器/dispose-pattern?

从 byte[] 创建 zip 文件

为什么 StyleCop 建议在方法或属性调用前加上this?

如何从标头中检索基本身份验证凭据?

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

将 DataRowCollection 转换为 IEnumerable

使用 Windows 服务和 C# 检测 USB 驱动器插入和移除

如何防止和/或处理 StackOverflowException?

我可以从 .NET/C# 获取其他进程的命令行参数吗?

为什么 System.Timers.Timer 能在 GC 中存活,而 System.Threading.Timer 不能?

如何在 Action 中传递参数?

如何从 .NET 读取 PEM RSA 私钥

用 double 替换 int 时的 Visual Studio 长编译

如何从文件中删除单个属性(例如只读)?

序列化和反序列化 .NET 对象的最快方法

从不同程序集中的类名中解析类型