- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要处理一个唯一要点是引用 NuGet 包的项目,然后 Visual Studio 将下载并更新该包(及其所有依赖项)(目前对我来说是 2017 年)。1 (这有点类似于 another question 中的描述。)
当我创建 .NET Framework 4.7.1 项目时,我可以使用 VS 的“管理 NuGet 包”功能来选择所需的包,VS 会将包下载到解决方案目录中,并下载我的构建脚本可以根据.csproj
中找到的信息找出要复制到我的实际项目文件夹中的DLL文件( <HintPath>
等)。
但是,当我对 .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 兼容性级别”是“.NET Standard 2.0”,.csproj
Unity 生成的文件将使用“旧式”详细格式(看起来实际上是针对 .NET Framework 4.*),因此需要引用库的显式路径。
最佳答案
正如我在对该问题的评论中提到的,忽略问题脚注,这看起来像是一个通用的 .NET 问题,我希望谷歌会向进行通用搜索的人推荐此页面,而不仅限于 Unity,而且它不会对于阅读该问题的其他人来说,很明显,在他们阅读了问题的大部分内容之前,该问题是针对 Unity 的。因此,我将首先给出通用 .NET 开发的答案。
如果涉及的所有项目都使用PackageReference
,那么不需要做任何特别的事情。只需从新项目模板创建 .NET 标准类库,添加对所需包的包引用,然后从要使用该组 NuGet 包的应用创建对类库的项目引用。
如果您有一个没有任何软件包的非 SDK 样式项目,那么您应该添加 <PackageRestoreStyle>PackageReference</PackageRestoreStyle>
。原因是PackageReference
在 NuGet 启动多年后添加到 NuGet,使用包的原始方式是 packages.config
。因此,当项目未选择 PackageReference
时恢复样式,默认为packages.config
。请参阅下一段。
如果您有一个使用 packages.config
的非 SDK 样式项目(或者没有软件包并且没有选择 PackageReference
恢复样式),那么这种方法可能不起作用。构建系统将构建应用程序的程序集,并可能复制 csproj
中直接引用的所有引用。 ,这意味着它将获取您的类库 dll 以及直接引用的任何 nuget 包。但是,由于应用程序 csproj 不知道类库的 NuGet 包,因此不会复制它们。通常,类库引用它使用的包,.NET 构建系统将使用名为 ResolveAssemblyReferences 的东西。查看类库 dll,看看它有哪些依赖项,然后复制这些 dll。但是,在这种情况下,类库项目没有任何编译依赖项,因为它从未使用项目引用的任何 NuGet 包。
这是 NuGet 和 .NET 团队鼓励客户迁移到 PackageReference
的原因之一。有很多问题,比如传递依赖,以及 <HintPath>
当项目移动时会变坏,只要您使用的项目类型支持它,效果就会更好。
现在,鉴于问题脚注提到提问者希望为 Unity 项目执行此操作,我将给出一个希望有效的答案。请注意,虽然我在 NuGet 客户端团队工作,但我对 Unity 一无所知,并且今天早上浪费了大约 2 个小时来安装它并尝试了解其功能,结果发现 Unity 似乎不支持 NuGet 或项目完全引用。
所以我的建议是:
使用dotnet publish
让 .NET 构建系统将所有相关 dll 复制到一个文件夹中,然后您可以在 Unity 项目中引用
或
多目标类库以同时面向 .NET Standard 2.0 和 .NET Framework 4.7.1(调整 .NET Framework 版本以使用与 Unity 项目使用的版本相同的版本)。通过更改 <TargetFramework>netstandard2.0</TargetFramework>
来完成此操作至<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>
(请注意,XML 元素末尾添加了 s
)。现在,当您构建类库时,.NET SDK 将在 bin\
中创建两个目录。目录,每个目标框架一个。至少目前看来,net471
目录获取所有dll,类似于非SDK风格的项目。
关于.net - 如何为 .NET Standard 创建 "NuGet Package Management Project"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56592020/
我已经在Visual Studio中创建了新的解决方案,启用了nuget包还原,并进入了解决方案根.nuget文件夹,该文件夹包含使包还原正常工作所需的以下文件:NuGet.exe,NuGet.con
自 Nuget 1.5 以来,我的团队一直在使用“启用包还原”选项,以使包不受我们的源代码控制。当 Nuget 1.6 发布时,我们注意到一个问题,即它没有拉取软件包,并跟踪它到 .nuget 文件夹
我维护了一些小的 Nuget 包。 我在 git 存储库中有一个 Nuget README 文件,.nupkg 文件由 VS 根据“Package”配置自动构建,存储在 .csproj 文件。 每当我
我们是一个小型开发团队,我们希望开始使用我们的库作为 NuGet 包。现在我已经看到我们可以创建 NuGet 提要或 NuGet 服务器或 NuGet 画廊。 现在我们不确定有什么区别,对于我们的小团
我正在编写一个脚本,它将自动打包 Nuget 文件并将其发布到我的私有(private)存储库(文件共享)和私有(private)符号服务器(在 localhost 上)。 当我运行 nuget pa
我有一个解决方案,我想从两个项目中创建一个 NuGet 包。 如果它只是一个项目,我会使用 .csproj 文件来规范 NuGet 打包器,但由于我希望两个不同的项目进入完成的包,我不能这样做。 我创
我正在做一个需要处理 Excel 文件的项目。我为这项工作找到了一个名为 Aspose.cells 的库。它不是一个免费的图书馆,我们应该从它的网站购买它的许可证,以便在我们的项目中使用它。但是,我发
我已经使用 Nuget 安装程序创建了一个 TeamCity 构建步骤,但是当我运行这些步骤时出现错误: Updating sources: server side checkout [15:35:4
是否有任何指南或建议来管理不在 nuget 上的库以及在 nuget 上的包。 其中大多数可能是 3rd 方库,除非我们专门安装它们,否则它们可能永远不会继续使用 nuget。 最好将这些 dll 放
我一直在研究自托管 NuGet,但很难理解如何设置它以及它如何帮助支持我们的开发过程。 有没有人对使用哪个,如何设置有任何建议? 或者我应该只使用托管服务? 最佳答案 在查看了各种解决方案(自托管和托
我正在为 OSGeo.FDO 创建 nuget 包,但我遇到了以下问题。 FDO 使用 providers.xml列出它可以使用的所有提供程序的文件。所以我创建了一个名为 OSGeo.FDO 的主包包
我想知道 NuGet 的含义是什么。它是像blah blah get这样的东西吗?它甚至有一个有意义的名字吗?或者它是某物的缩写还是有人为了好玩而决定这个名字?请帮忙,这个问题已经困扰了我 1 周。
This question already has answers here: Is it possible to change the location of packages for NuGet?
如何在 Visual Studio 之外下载 NuGet 包?所以它可以用来创建离线包。 最佳答案 如何在没有 Visual Studio 或 Nuget 包管理器的情况下下载 NuGet 包: 在
我似乎在网络上找不到任何对此表示赞同或反对的地方。谁能指出我的答案吗?或者更好的是,如果您从事 NuGet 工作,您能否给出一些指示,说明是否有任何计划允许商业库包(我认为需要某种身份验证)包含在未来
我已经打开了 TeamCity 的 NuGet 服务器,我想推送公共(public)包(即来自 NuGet.org 等公共(public)资源),因为构建服务器无法看到我们公司外部的信息,因此从 Nu
在我的工作团队中,我们依赖两个 NuGet 提要:来自 NuGet.org 的官方提要用于公共(public)包,而我们文件服务器上的文件夹用于内部包。 这对我们来说效果很好,但我认为我们有一个潜在的
我在我工作的 Web 服务器(在 IIS 7.0 下)上设置了新的 NuGet Gallery。该网站本身已设置并运行良好。我们能够注册帐户、确认电子邮件地址,甚至通过网站本身上传新包。 我们的自动构
当我们在 Visual Studio 2017 中创建 nuget 包时,它默认将项目引用添加为另一个 nuget 引用。 我们如何在创建包时禁用它,而是: 选择不同的包名 在创建包时包含项目的 dl
我可以执行类似 - mono --runtime=v4.0.30319 /Library/TeamCity/buildAgent/work/b0d2d3fefe88d393/.nuget/NuGet.
我是一名优秀的程序员,十分优秀!