gpt4 book ai didi

c# - 使用 nuget 包的目标框架注意事项?

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:49 30 4
gpt4 key购买 nike

我对创建 NuGet 包的过程相当陌生。我最近通过 NuGetPackageExplorer 创建了一个 NuGet 包。 “Package Metadata” View 有一个“Framework Assembly References”部分,其值为“Microsoft.CSharp (Any,Verion=0.0)”。这是 nuspec 文件的样子:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>My.Cool.NuGet.Package</id>
<version>1.0.2</version>
<title></title>
<authors>John Smith</authors>
<owners>John Smith</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>My cool NuGet package</description>
<frameworkAssemblies>
<frameworkAssembly assemblyName="Microsoft.CSharp" />
</frameworkAssemblies>
</metadata>
</package>

能否请您解释以下维度的关系、依赖性和约束:

  • NuGet 包的源 .NET 项目的目标框架版本
  • nuspec 文件的 frameworkAssemblies 部分
  • 安装 NuGet 包的项目的目标框架版本

上面nuspec中的frameworkAssembly值在NuGetPackageExplorer中显示如下:

Assembly name: Microsoft.CSharp

Supported frameworks: Any,Version=v0.0

这是否意味着 NuGet 包旨在与 .NET Framework 版本无关?在任何情况下我都想在本节中明确说明特定版本吗?我问的原因是我昨天在 MVC 项目中安装了一个 NuGet 包,我遇到了一些奇怪的行为。具体来说:

  • NuGet 包显示为已安装并显示在“引用”列表中
  • 我能够将 using 指令添加到 NuGet 包的命名空间

但是,当我尝试运行该应用程序时,编译器针对这些 using 指令显示了“找不到命名空间类型”的错误。但随后编译器错误消失了,但应用程序不会运行先前编译器错误的 b/c。在我摆弄了 MVC 项目和 NuGet 包源项目的版本设置之后,我能够绕过这个错误。所以现在我正在尝试了解关于目标框架我需要考虑和配置的更详细信息。

最佳答案

NuGet 包的源项目的 TargetFamework 应该是安装它的项目所需的最低框架版本。例如,如果您知道您将在 4.5 和 4.6 框架中拥有项目,您可以为包 4.5 创建源代码。您还可以将多个框架的多个构建放在一个包中。这是 documentation关于那个。

安装包的项目的 TargetFramework 应该大于或等于包的版本。由于框架的较高版本与较低版本兼容。它不应允许您安装不支持您在项目中使用的框架的包。

frameworkAssemblies 部分仅定义包正在使用哪些框架程序集,因此会自动添加引用。检查documentation了解更多详细信息。

关于c# - 使用 nuget 包的目标框架注意事项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708174/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com