.net Dotnet -在同一个解决方案中为不同的项目使用不同版本的MSBuild

zsbz8rwp  于 2023-05-01  发布在  .NET
关注(0)|答案(1)|浏览(140)

我的任务是为一个用VB编写的遗留项目添加功能。net Framework 4.8.我的技能集是在c#和更喜欢使用。这两个人在一起能玩得很好吗?我希望能够将我的项目添加到现有的解决方案中,然后在需要的地方添加引用,并相信Microsoft的魔力,这些都可以编译成相同的中间语言。
我已经看到了问题,只是建立现有的应用程序,现在我的项目在那里。(尚未尝试引用它们)

Microsoft.Common.CurrentVersion.targets(2977, 5): [MSB4803] The task "ResolveComReference" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild. See https://aka.ms/msbuild/MSB4803 for further details.

对我来说,这表明我使用IDE的问题。是否有一种方法可以配置项目以在适当的情况下使用不同版本的MSBuild?
谢谢

mspsb9vt

mspsb9vt1#

我不认为你的问题是关于不同版本的MSBuild。
但首先要回答一个问题:

  • 不可以,您不能在生成解决方案的同时对解决方案中的不同项目使用不同版本的MSBuild。msbuild mysolution.slndotnet build mysolution.sln将为整个解决方案使用相同的构建引擎。

但是一个解决方案中的不同项目可以指定不同的ToolsVersion和不同的目标框架。

.NET实现

.Net有不同的implementations,有不同的运行时和库。

  • “.NET Framework”是一个仅适用于Windows的实现。
  • “.NET”(以前为“.NET Core”)是一个跨平台的实现。(是的,我们正在讨论。NET作为软件开发平台。NET作为实现上述软件开发平台是令人困惑的。)

您可以有一个将项目与不同目标框架混合的解决方案。一个有针对性的项目解决方案。NET Framework 4.8(net48)和.NET 7.0(net7.0)可以使用相同版本的MSBuild构建。
但是你不能混合框架之间的依赖关系。.NET 7程序集不能使用。NET Framework 4.8装配,反之亦然。有.NET Standard。一个项目可以是目标项目,也可以是多目标项目。NET Standard 2.0(netstandard2.0),以便两者都可以使用。NET Framework和.NET.

MSBuild MSB4803

您是否尝试使用dotnet工具构建解决方案?dotnet工具具有MSBuild的嵌入式副本,但dotnet是跨平台的,不支持。NET Framework,而且只知道。NET SDK安装。
MSB4803错误的文本有些误导,我看到了使用“MSBuild版本”所带来的混乱。
从命令行生成至少有一个项目目标的解决方案时。NET Framework,则不能使用dotnet工具。直接使用msbuild。当msbuild与Visual Studio(或Visual Studio构建工具)一起安装时,它知道。NET SDK安装和。NET框架安装。

  • dotnet build example.sln相当于msbuild /t:build example.slnbuild目标是默认的,因此msbuild /t:build example.sln等效于msbuild example.sln
  • dotnet clean example.sln相当于msbuild /t:clean example.sln

不幸的是,dotnet publish命令和publish目标并不等价。

摘要

如果旧版项目中使用COM引用,则迁移到。NET 7可能会是一个不小的努力。对于您当前的任务,您可能需要坚持使用当前的代码库,并为迁移创建单独的用例和故事。

相关问题