ASP.NET Core使用记录3

2023-11-30 19:23:38 浏览数 (1)

解决Visual Studio报错 NETSDK1152: 找到了多个具有相同相对路径的发布输出文件

原因: 是项目多层引用(a引用了b、c,d引用了a、b、c),且被引用的项目生成了xml文件,发布时导致xml文件重复 ,但.net 6.0下会触发报错。 解决:

  1. 被引用项目不要生成xml文件【根本原因】;
  2. 发布时,将C:Program Filesdotnetsdk6.x的sdk移出C:Program Filesdotnet目录;
  3. 将C:Program Filesdotnetsdk6.0.100SdksMicrosoft.NET.SdktargetsMicrosoft.NET.ConflictResolution.targets下<NETSdkError Condition="‘$(_ResolvedFileToPublishContainsDuplicates)’ == ‘true’"设为false;
  4. 在需要发布项目的csproj里新增false;

4种均可。

托管代码和非托管代码

托管代码

托管代码(Managed Code)就是中间语言(IL)代码,在公共语言运行库(CLR)中运行。编译器把代码编译成中间语言,当方法被调用时,CLR把具体的方法编译成适合本地计算机运行的机器码,并且将编译好的机器码缓存起来,以备下次调用使用。随着程序集的运行,CLR提供各种服务:内存管理,安全管理,线程管理,垃圾回收,类型检查等等。

非托管代码

非托管代码,直接编译成目标计算机码,在公共语言运行库环境的外部,由操作系统直接执行的代码,代码必须自己提供垃圾回收,类型检查,安全支持等服务。如需要内存管理等服务,必须显示调用操作系统的接口,通常调用Windows SDK所提供的API来实现内存管理。

区别

1、托管代码是一种中间语言,运行在CLR上;非托管代码被编译为机器码,运行在机器上。 2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;非托管代码依赖于平台和语言。 3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;非托管代码需要自己提供安全检测、垃圾回收等操作。

0 人点赞