VS中.NET项目中央包管理和多目标框架配置

news2024/9/21 21:07:49

引言

通常我们在做项目时会给不同的程序员分配不同的功能模块进行各自开发,当然要遵守一定的约定或同一的框架设计。这在同一个工程中就会出现不同的项目类库需要引用,而这些类库可能会引用一些Nuget包,对于这些包的管理如果都在每个项目中去定义版本就会显得麻烦,如果引用了不同的版本可能会导致意想不到的错误,并且查看这些包的版本也非常不方便。

同时如果我们需要做目标多框架类库时,不同的框架有些包时是都支持的而有些有需要特定版本。

1、中央包管理

在项目中添加文本文件,根据官方介绍,写入以下内容:

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
  </ItemGroup>
</Project>

然后将文件名改为:Directory.Packages.props。将该文件关闭打开一次

VS会自动识别到该文件,对Nuget包进行管理,此时你如果在项目中指定了包版本将会提示错误,我们需要将各个包的版本定义在中央包管理文件中。

  <ItemGroup>
    <PackageVersion Include="Autofac" Version="7.1.0" />
    <PackageVersion Include="HandyControl.Lang.en" Version="3.5.1" />
    <PackageVersion Include="log4net" Version="2.0.17" />
    <PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
    <PackageVersion Include="Microsoft.Web.Administration" Version="11.1.0" />
    <PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.122" />
    <PackageVersion Include="Microsoft-WindowsAPICodePack-Shell" Version="1.1.5" />
    <PackageVersion Include="MySql.Data" Version="9.0.0" />
    <PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageVersion Include="CommunityToolkit.Mvvm" Version="8.2.2" />
    <PackageVersion Include="DotNetProjects.SVGImage" Version="5.2.1" />
    <PackageVersion Include="HandyControl" Version="3.5.1" />
    
    <PackageVersion Include="NModbus" Version="3.0.81" />
    <PackageVersion Include="System.IO.Ports" Version="8.0.0" />
    <PackageVersion Include="System.Management" Version="8.0.0" />
    <PackageVersion Include="System.Reactive" Version="6.0.1-preview.1" />
    <PackageVersion Include="System.Threading.Channels" Version="9.0.0-preview.3.24172.9" />
    
  </ItemGroup>

2、多目标框架

2.1、项目升级

这里如果我们的项目是.Net Framework项目需要将我们的项目升级为新的管理模式。.NET 升级助手概述 - .NET Core | Microsoft Learn

 2.2、多目标框架

需要:TargetFramework => TargetFrameworks 变复数

可参考下面代码,这里有net8.0-windows;net48;net472;net462四个目标框架

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
	  <TargetFrameworks>net8.0-windows;net48;net472;net462</TargetFrameworks>
  </PropertyGroup>
	<ItemGroup>
		<PackageReference Include="CommunityToolkit.Mvvm" />
		<PackageReference Include="HandyControl" />
		<PackageReference Include="log4net" />
		
		<PackageReference Include="Microsoft.Web.Administration" />
		<PackageReference Include="Newtonsoft.Json" />
		<PackageReference Include="System.IO.Ports" />
		<PackageReference Include="System.Management" />
		<PackageReference Include="ValueConverters" />
	</ItemGroup>
</Project>

2.3、Nuget包管理

此时出现了一些问题,

对于一些包比如 Microsoft.CSharp、System.Data.DataSetExtensions这两个包net8是不需要的,而又是net48;net472;net462必须。

对于一些包比如 ValueConverters,net8、net48可用3.0.26版本,而3.0.26版本不支持net472、net462。这里我们可以这样定义:

 <!--通用的版本-->
<ItemGroup>
   <PackageVersion Include="Autofac" Version="7.1.0" />
   <PackageVersion Include="HandyControl.Lang.en" Version="3.5.1" />
   <PackageVersion Include="log4net" Version="2.0.17" />
   <PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
   <PackageVersion Include="Microsoft.Web.Administration" Version="11.1.0" />
   <PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.122" />
   <PackageVersion Include="Microsoft-WindowsAPICodePack-Shell" Version="1.1.5" />
   <PackageVersion Include="MySql.Data" Version="9.0.0" />
   <PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
   <PackageVersion Include="CommunityToolkit.Mvvm" Version="8.2.2" />
   <PackageVersion Include="DotNetProjects.SVGImage" Version="5.2.1" />
   <PackageVersion Include="HandyControl" Version="3.5.1" />
   
   <PackageVersion Include="NModbus" Version="3.0.81" />
   <PackageVersion Include="System.IO.Ports" Version="8.0.0" />
   <PackageVersion Include="System.Management" Version="8.0.0" />
   <PackageVersion Include="System.Reactive" Version="6.0.1-preview.1" />
   <PackageVersion Include="System.Threading.Channels" Version="9.0.0-preview.3.24172.9" />
   
 </ItemGroup>
<!--针对net48版本-->
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
	<PackageVersion Include="Mapster" Version="7.2.0"/>
	<PackageVersion Include="Microsoft.CSharp" Version="4.7.0"/>
	<PackageVersion Include="System.Data.DataSetExtensions" Version="4.5.0"/>
	<PackageVersion Include="ValueConverters" Version="3.0.26" />
</ItemGroup>
<!--针对net472和net462版本-->
<ItemGroup Condition="'$(TargetFramework)' == 'net472' OR '$(TargetFramework)' == 'net462'">
	<PackageVersion Include="ValueConverters" Version="2.2.10"/>
	<PackageVersion Include="Mapster" Version="7.2.0"/>
	<PackageVersion Include="Microsoft.CSharp" Version="4.7.0"/>
	<PackageVersion Include="System.Data.DataSetExtensions" Version="4.5.0"/>
</ItemGroup>
<!--针对net8-windows版本-->
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-windows'">
	<PackageVersion Include="Mapster" Version="7.4.1-pre01" />
	<PackageVersion Include="ValueConverters" Version="3.0.26" />
</ItemGroup>

通过给ItemGroup 添加Condition来限定,注意其中的语法格式。

3、多框架代码区分

使用前置处理器指示词可以限定不同框架所使用的代码

C# 前置处理器指示词 | Microsoft Learn

#if NETFRAMEWORK
               //代码
#endif
               //代码

可指示不同的框架版本或NET/NETFRAMEWORK/NETCORE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

凸优化学习(1)——什么是凸优化、凸集、凸函数

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

铲屎官都该知道的除浮毛神器——希喂、美的、352宠物空气净化器

为什么明明在南方&#xff0c;却能感受到北方柳絮漫天飞舞&#xff0c;鼻子被堵住的感觉&#xff1f;这都是家里的猫咪在作怪。最近我感觉家里的空气特别闷&#xff0c;打开窗户通风了很久都没什么用就没去管了。早上起来的时候鼻子异物感很重&#xff0c;甚至还咳嗽不止&#…

Android TextView 学习备忘

android:gravity 与 android:layout_gravity&#xff1a; Android TextView文本位置_mob649e8166858d的技术博客_51CTO博客https://blog.51cto.com/u_16175509/8597723

【重学 MySQL】三、RDBMS 和非 RDBMS

【重学 MySQL】三、RDBMS 和非 RDBMS 关系型数据库&#xff08;RDBMS&#xff09;关系型数据库的核心概念关系型数据库的优点关系型数据库的缺点 非关系型数据库&#xff08;非 RDBMS&#xff09;定义与特点主要特点常见类型应用场景优缺点NoSql 的演变早期阶段&#xff08;20世…

langgraph tool如何发送自定义事件

在工具调用过程中&#xff0c;如何将中间状态返回到的stream&#xff0c;可以使用from langchain_core.callbacks import dispatch_custom_event方法实现。示例如下 from langchain_core.callbacks import dispatch_custom_event from langchain_core.tools import tooltool d…

分布式技术概览

文章目录 分布式技术1. 分布式数据库&#xff08;Distributed Databases&#xff09;2. 分布式文件系统&#xff08;Distributed File Systems&#xff09;3. 分布式哈希表&#xff08;Distributed Hash Tables, DHTs&#xff09;4. 分布式缓存&#xff08;Distributed Caching…

QT 联合opencv 易错点

https://blog.csdn.net/qq_51699436/article/details/135777911 网上已经有大量优秀切详尽的文章来讲述QT联合opencv了&#xff0c;我把容易出错的点列出来备忘 1、在进行opencv进行编译时&#xff0c;要确认好是32位还是64位&#xff0c;因为在创建QT项目的时候QT和opencv要匹…

Vue(7)——工程化开发

目录 工程化开发 组件化开发 普通组件的注册使用 局部注册 全局注册 组件三大组成部分说明 template style script 组件通信 父子关系 prpo prpos校验 类型校验 其他校验 prop与data、单向数据流 工程化开发 工程化开发模式&#xff1a;基于构建工具的环境…

LLM大模型学习:AI大模型原理、应用与未来趋势!

1. 引言 在自然语言处理&#xff08;NLP&#xff09;与人工智能&#xff08;AI&#xff09;的广袤星海中&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;宛如一颗璀璨的星辰&#xff0c;正悄然改变我们与语言和机器的互动方式。本章将引领您步入一…

Python从入门到高手1.1节-在windows中安装Python

1.1.1 为什么要安装Python解释器&#xff1f; Python是一种解释型语言&#xff0c;代码的执行需由解释器来逐行读取、转换成机器语言并执行。没有Python解释器&#xff0c;我们编写的Python代码便无法在计算机中运行。 同学们对语言翻译器一定不陌生&#xff0c;我们通过翻译器…

MySQL之DQL-分组函数

1、分组函数 1. 分组函数语法 分组函数也叫聚合函数。是对表中一组记录进行操作&#xff0c;每组只返回一个结果。我们只讲如下5个常用的分组函数&#xff1a; 分组函数 含义 MAX 求最大值 MIN 求最小值 SUM 求和 AVG 求平均值 COUNT 求个数 分组函数的语法如下…

一款企业网盘,支持多种文件存储方式如FTP,SFTP,MINIIO等以及跨平台管理(附源码)

前言 随着数字化转型的推进&#xff0c;企业越来越依赖于云端技术来存储、管理和共享重要的业务文件。传统的本地存储处理方案虽然可靠&#xff0c;但在灵活性、可访问性和协作方面显得力不从心。尤其在远程工作变得日益普遍的今天&#xff0c;如何高-效地管理分散团队之间的文…

【IEEE独立出版 | 往届快至会后2个月检索,刊后1个月检索】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 电子信息的出现与计算机技术、通信技术和高密度存储技术的迅速发展并在各个领域里得到广泛应用有着密切关系。作为高技术领域中重要的前沿技术之一&#xff0c;电子信息工程具有前瞻性、先导性的特点&#x…

代码随想录训练营day42|188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

188.买卖股票的最佳时机IV 变成了最多可以买卖k只股票 class Solution { public:int maxProfit(int k, vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2*k1,0));for(int i1;i<2*k1;i2){dp[0][i]-prices[0];}//初始…

【ESP32】fopen 无法创建.html文件

Long filename support设置为Long filename buffer in heap 后fopen正常创建.html文件

springBoot 集成https

springBoot 集成https 1、springBoot默认的证书格式 pring Boot 需要 .p12 或 .jks 格式的证书。如果你只有 .pem 和 .key 文件&#xff0c;可以使用 openssl 工具将它们转换成 .p12 文件 2、转换.p12 我的证书文件如下&#xff0c;需要转换 2.1 下载openssl https://slpr…

C#EF框架

EF概念: 实体框架&#xff08;Entity Framework&#xff09;是一种对象关系映射器&#xff08;O/RM&#xff09;&#xff0c;它使.NET开发人员能够通过.NET对象来操作数据库。它消除了开发人员通常需要编写的大多数数据访问代码的需求。ORM框架有个优势&#xff1a;解放开发人…

游戏开发| Unreal5.2-5.4接入chatGPT定制游戏NPC

引擎版本UE5.2 (也支持到5.4,有试用其它插件所以选择之前版本) 使用插件(免费) 1.VArest (插件官方介绍:Plugin that makes REST communications much easier.)可以让REST(Representational State Transfer)通信变得更加容易,涉及客户端与服务器之间通过 HTTP 协议…

帧缓冲 framebuffer

一、基本概念 framebuffer: 帧缓存、帧缓存&#xff08;显示设备&#xff09; Linux内核为显示提供的一套应用程序接口。&#xff08;驱动内核支持&#xff09; 分辨率&#xff1a; 像素点 显示屏&#xff1a;800 * 600&#xff08;横向有800个像素点&#xff0c;纵向有60…

9.10总结

今天学习了树形dp 根据题目意思可以建出一颗树&#xff0c;先dfs递到叶节点&#xff0c;在归的时候有递推方程 dp[n][0]max(dp[s][1],dp[s][0]); dp[n][1]dp[s][0]; s为n的子节点&#xff0c;那么递推方程就写出来了&#xff0c;今天还做了几道dp&#xff0c;都是线性dp 总…