在 VS 2022 中打开 .net Framework 4.5 项目。有什么解决方法吗?

Mou*_*mit 169 .net .net-framework-version visual-studio windows-10

无论如何,是否可以.net framework 4.5visual studio 2022.

可能问题不在于 VS2022,而是因为.net framework 4.5开发包不再可用..我的项目无法更改目标版本..有什么解决方法吗?

在此输入图像描述 在此输入图像描述

Hus*_*ish 367

  • 从 nuget.org下载Microsoft.NETFramework.ReferenceAssemblies.net45
  • 以 zip 格式打开包(或重命名包文件并将其扩展名从 .nupkg 更改为 .zip,然后打开)
  • 将文件从 复制build\.NETFramework\v4.5\C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5
  • 关闭 Visual Studio,然后重新打开它

有关更多详细信息:在 Visual Studio 2022 中构建面向 .NET Framework 4.5 的项目

  • *注意*:下载后,您必须将文件名从“.nupkg”重命名为“.zip”,其余过程如本答案中所述。也许大多数人都知道它,但它可以为像我这样的人节省时间。这就是为什么把评论放在这里的原因。 (44认同)
  • 请记住在此之后关闭并重新打开 Visual Studio,因为更改不会自动生效。 (18认同)
  • 当针对 .Net 4.0 时,这也适用,只需下载 .net40 nuget 包,并将文件复制到 \.NETFramework\v4.0 文件夹。重启VS然后打开项目就可以了。 (11认同)
  • 即使您已有 v4.5 文件夹,请将这些文件移动到新文件夹 _BK 并将文件粘贴到 v4.5 文件夹中。作品完美。谢谢你! (7认同)
  • 它不适用于 .Net 3.5 (2认同)
  • 似乎不起作用。这些文件存在,但其他框架的选项根本不会显示在“目标框架”下拉列表中。 (2认同)

Chr*_*nez 20

虽然所有提出的、甚至已接受的解决方案都有效,但它们都不是首选方法。

您唯一需要做的就是添加对 NuGet 包的引用,如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net40</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

图 1:通过参考程序集面向 .NET Framework 4.0 的 C# 项目

您可以直接在 Visual Studio 中*.csproj或通过包管理器UI 进行此更改。包中的 MSBuild 扩展将处理其余的事情。无需编写脚本、复制文件或授予权限。这将在没有海拔的情况下工作,这需要写在%PROGRAMFILES%.

设置PrivateAssets="All"将使该包仅在设计时参考。如果您的目标还构建了 NuGet 包,则不会将其拾取或包含为传递依赖项。

VS2022 中的.NET 4.0 控制台

图 2:Visual Studio 2022 解决方案资源管理器中面向 .NET Framework 4.0 的项目

Roslyn问题 56161:删除 .NET 4.5 目标包要求进一步确认了在未安装目标包时如何使用引用程序集。当您不想安装目标包或目标包不可用时(例如在没有 Visual Studio 的构建服务器上),此方法非常有用。

证据

.NET 目标包

图 3:较旧的 .NET 目标包未安装或不可用

卸载 Visual Studio 2019 后,我遇到了同样的问题。添加此包引用后,构建按 Visual Studio 和 CLI 的预期工作。

例子

  1. 使用 VS2022 Gist将文件从 .NET 4.0 控制台下载到任意文件夹
  2. 打开开发人员提示并导航到目标文件夹
  3. 执行dotnet restore
  4. 在 Visual Studio 2022 中打开项目
  5. 构建并运行项目

附加信息

  • dotnet使用或从命令行构建msbuild应该没有错误和警告
  • 不必安装目标 .NET Framework 版本来构建它,但需要运行它;包括单元测试
  • 可能需要运行Clean和/或手动删除binobj、 ,并可能.vs需要清除初始 Visual Studio 警告
  • 可能需要执行显式 NuGet 恢复(例如:dotnet restore)以清除初始 Visual Studio 警告
  • Visual Studio 似乎需要安装目标 .NET Framework
  • 显示的示例面向安装了 .NET Framework 4.8 的 .NET Framework 4.0
  • 针对通过命令行编译的 .NET Framework 2.0 或 3.5,但不是 Visual Studio,可能是因为我没有安装它们
  • 如果 Visual Studio 仍然让您感到悲伤:
    • 添加至少一个受支持的目标框架名称(例如:net48
    • 使用 Visual Studio Code(我更喜欢完整的 VS,但它是一个选项)

  • 不适合我,所以不像你说的那么容易。将这些行添加到 csproj 后,仍然会出现加载错误,并且不会打开项目。 (2认同)

Bre*_*boy 12

从有关复制文件的答案链接的文章的评论中:“安装“Windows 8 SDK”。它可以只安装“.Net Framework 4.5 Software Development Kit”。没有其他包袱。”

此选项对我来说是最快的,因为我可以更轻松地运行提升的安装程序,而不是切换到提升的安装程序以写入程序文件文件夹。

在此输入图像描述


App*_*ere 5

安装多个旧目标包的另一种方法是安装 Visual Studio 2019。

注意:如果你卸载VS2019,它会再次删除它们,所以请复制你想要的,然后再粘贴回来。

在此输入图像描述