walterlv / BlogComments

3 stars 0 forks source link

post/support-old-netfx-on-vs2022-or-later #104

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

无需安装 VS2019,在 Visual Studio 2022 中编译 .NET Framework 4.5/4/3.5 这样的古老框架 - walterlv

无需安装 VS2019,在 Visual Studio 2022 中编译 .NET Framework 4.5/4/3.5 这样的古老框架

https://blog.walterlv.com/post/support-old-netfx-on-vs2022-or-later.html

S0cialEngineering commented 2 years ago

Mark :-)

afunc233 commented 2 years ago

之前的 WPF 项目 (.net framework) 好像行不通,就是项目文件长成下面这样的这种

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{BD1E888F-B5F0-4FCF-9F83-D72C7E5D76B2}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <RootNamespace>WpfApp6</RootNamespace>
    <AssemblyName>WpfApp6</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <WarningLevel>4</WarningLevel>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <Deterministic>true</Deterministic>
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
walterlv commented 2 years ago

@afunc233 升级一下吧,见 删删删!快速将旧版 .NET Framework 的 WPF 项目格式(csproj) 迁移成新版 SDK 风格的项目格式 - walterlv

QianMoXi commented 2 years ago

不安装VS2019,还有一种办法可以解决VS2022编译net4.0的问题,就是使用命令行直接安装VS2019的net4.0组件包。 但是无论怎么解决编译的问题,也没办法在VS2022里面打开Winform的设计器(部分项目),所以最终还是得安装回VS2019。

文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: TestForm --- 未能加载基类“XXXXXXX”。请确保已引用该程序集并已生成所有项目。     
 此错误的实例(1)  

1.   隐藏调用堆栈 

在 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
在 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
在 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
在 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)  
QianMoXi commented 2 years ago

这里附上不需要安装VS2019,但是也可以编译net4.0项目的另外一种办法: 下载VS2019的安装程序,运行以下命令,把Microsoft.Net.Component.4.TargetingPack下载到c:\vslayout中(目前应该没其它办法可以拿得到这个包,当然也可以放到网盘里面,但是那样就不是官方渠道了)

.\vs_enterprise.exe --layout c:\vslayout --add Microsoft.Net.Component.4.TargetingPack --lang zh-CN

下载完成后,找到里面的Microsoft.Net.4.TargetingPack,version=4.0.30319.2文件夹,运行命令安装:

.\netfx_dtp.msi MSIFASTINSTALL=7 EXTUI=1

重启VS2022,你就会发现,可以正常编译过net4.0的项目了。

walterlv commented 2 years ago

@QianMoXi 感谢,我试试

driver1998 commented 2 years ago

@QianMoXi 这个包在Windows 8 SDK里,如果不想装VS2019可以搞一个Win8 SDK的安装程序,然后除了.NET 4.5 SDK其它全部不选

driver1998 commented 2 years ago

.NET 4.5.2可能在Windows 8.1 SDK,这个我不是很确定

QianMoXi commented 2 years ago

@driver1998 SDK应该比我这个大,而且找起来麻烦,我这样可以直接把安装包提取出来,只需要下载一次,就能一直复用,如果要找4.5.2,这样就能下载了,非常方便的。 .\vs_enterprise.exe --layout c:\vslayout --add Microsoft.Net.Component.4.TargetingPack --add Microsoft.Net.Component.4.5.2.TargetingPack --lang zh-CN 附上有可能需要到的Net版本的组件名称: Microsoft.Net.3.5.SDK Microsoft.Net.Component.4.TargetingPack Microsoft.Net.Component.4.5.1.TargetingPack

安装参数应该都是MSIFASTINSTALL=7 EXTUI=1

dzp0839 commented 2 years ago

找到个一劳永逸的方法: 用nuget方法拿到目标包之后,进入packages目录,将该目录下的所有文件复制到 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5 重启VS2022即可

MrXhh commented 1 year ago

最新【一键处理】方法: https://github.com/MrXhh/VSTools/releases 1)下载 VS2022Net4NotCompileFix 2)右键管理员执行 3)重启VS