当前位置 : 首页 » 互动问答 » 正文

为多个.NET Framework版本创建NuGet包

分类 : 互动问答 | 发布时间 : 2018-04-27 15:06:17 | 评论 : 1 | 浏览 : 16 | 喜欢 : 0

我正在开发一个库,并希望为.NET Framework的多个版本创建NuGet包。我没有找到任何有完整动作列表的文章。

我尝试过的第一个选项是创建一系列配置,如Release_Net45等等。然后,我编辑了csproj以更正每个配置的输出目录(lib / net45等)和目标框架版本。然后我构建了每个配置。之后,我运行了nuget pack,并成功创建了一个包含一个dll的警告,因为它已经在包中了......

然后我尝试编辑csproj以包含TargetFrameworks元素和元数据包元数据到版本配置对应的PropertyGroup。在编辑后重新加载项目后,在解决方案资源管理器中出现了一个名为Dependencies的新组。我尝试使用msbuild / t:pack / p:Configuration = Release在Developer Command Prompt中创建软件包,但它完成时出现错误,表示没有软件包目标。为了解决它,我添加了NuGet.Build.Tasks.Pack包,然后构建了包。但是当我在配置管理器中看到它们时,我的配置突然被破坏了。

我没有想到为多个目标框架设置一个包会非常痛苦:(有什么正确的方法来做到这一点?完成这项任务的指导?

回答(1)

  • 1楼
  • The TargetFramework / TargetFrameworks 属性仅在基于SDK的项目中受支持。目前,只有用于.NET Standard,.NET Core和ASP.NET Core项目的项目模板使用此基于SDK的项目格式。因此,您可以创建一个.NET标准库,然后编辑csproj(右键单击项目>编辑)。

    一个最简单的示例是:

     <Project Sdk =“Microsoft .NET.Sdk“>
      <的PropertyGroup>
        <TargetFrameworks> net45; net461 </ TargetFrameworks>
      </的PropertyGroup>
    </项目>
    

    注意Sdk属性的存在,它提供了许多默认和额外的构建逻辑。您不需要在文件夹结构中指定任何.cs文件,并且可以使用项目的属性页来设置与NuGet相关的属性

    在您的案例中显示依赖关系节点的原因是因为VS 2017附带了两个不同的项目用于.NET项目的系统 - 在VS中很久以来的经典之作,以及在新的项目系统模型(CPS)上开发的新项目,它不支持经典项目系统的所有功能,但具有额外的功能像新的依赖关系模型,NuGet的属性页面以及在项目加载时支持编辑项目文件。要加载的项目系统的选择基于项目文件中是否存在 TargetFramework or TargetFrameworks

相关阅读: