【发布时间】:2019-10-28 17:28:30
【问题描述】:
我想使用一个项目,其唯一的一点是引用 NuGet 包,然后 Visual Studio 将下载和更新这些包(以及它们的所有依赖项)(目前,对我来说是 2017 年)。1(这有点类似于another question 中描述的内容。)
当我创建一个 .NET Framework 4.7.1 项目时,我可以使用 VS 的 Manage NuGet Packages 功能来选择所需的包,VS 会将包下载到解决方案目录中,并且我的构建脚本可以根据在.csproj 文件(<HintPath> 等)中找到的信息确定将哪些 DLL 复制到我的实际项目文件夹中。
但是,当我对 .NET Standard 2.0 项目执行相同操作时,VS 将使用新的简化 .csproj 格式。它所提到的(显式地和传递地)所需的包都是一个 <PackageReference> 元素,其中只有我明确选择引用的每个包的包名和版本。我的脚本不足以将引用移植到目标 .csproj 文件中。2
在针对 .NET Standard (2.0) 时,是否还有通过这样一个虚拟项目管理 NuGet 包的好方法?
1:造成这种情况的原因包括大量单独的解决方案,其中许多需要相同的包,并且并非所有开发人员都应该自己管理这些包,以及不支持 NuGet 的环境他们自己的(比如 Unity 游戏引擎,所以a separate project to manage and pull NuGet references is the way to go)。
2:即使Unity项目中配置的“API Compatibility Level”是“.NET Standard 2.0”,Unity生成的.csproj文件也会使用“old-style”verbose格式(并且实际上是针对 .NET Framework 4.*,似乎)并因此期望引用库的显式路径。
【问题讨论】:
-
你要的
nuget package management project是用来管理.net标准项目还是同时管理.net标准、.net fx和.net核心项目? -
@LanceLi-MSFT:坦率地说,我不太清楚 - 在手头的 Unity 案例中,我认为我需要它从包中检索与 .NET Standard 2.0 兼容的库,即使目标从技术上讲,该项目似乎是一个 .NET Framework 项目。我更喜欢对所有目标都以相同方式工作的解决方案(以尽量减少在未来开发例如 Core 时的重新配置),但如果这不可能,.NET Standard(和 Unity?)兼容的解决方案应该成为这个问题的焦点
-
您能否编辑问题标题并考虑改写您的问题正文。如果您忽略问题的两个脚注,答案就是“创建一个 .NET Standard 类库”。其他一切都适用于几乎所有非 Unity 的 .NET 项目。还要考虑标记统一,因为您的问题不是通用的 .NET 并且非常特定于 Unity
-
@zivkan:您好,我认为这里可能存在误解。如前两段所述,要求以能够自动找到/复制所有必需库的方式下载包及其依赖项,例如通过脚本。第三段描述了在使用 .NET Standard 项目时情况并非如此。虽然 Unity 可能是一个常见的例子,但在任何我不能依赖丢失的包在以后检索的环境中(例如在构建期间),都需要这样的过程。不过,我会尝试澄清问题描述。
-
应该由 .NET 构建系统来解决这个问题。只有创建自己的项目类型的人,所以在我个人看来,Unity 是缺乏的。查看他们的项目系统,它几乎是一个“正常”的 .NET 项目,因此可以重用所有正常的 .NET 构建系统功能来自动获取正确的 DLL,但他们选择禁用项目和包引用。
标签: .net visual-studio-2017 nuget .net-standard