创建一个适用于任何.NET版本的.NET应用程序(如果只有基本要求)

Iro*_*Rod 6 .net c#

我在Windows 10上使用VS2017来处理C#项目.它是一个非常小的控制台应用程序,只需要管理员权限,然后运行HTA.

代码仅引用这些.NET程序集:

using System;
using System.Diagnostics;
using System.IO;
Run Code Online (Sandbox Code Playgroud)

由于所有这些都存在于.NET以及2.0之后,因此似乎应该可以创建应用程序而无需指定除.NET 2.0之外的任何内容.但这样做会导致应用程序在仅具有.NET 4.0或更高版本的系统上运行时显示"必须安装.NET 2.0或3.5"消息.

有没有办法创建这个应用程序,所以它没有指定.NET版本?我尝试删除<TargetFrameworkVersion>.csproj文件,但它仍然认为它是一个.NET 4.0应用程序.

UPDATE

基于建议的答案和本文,我更新了App.config以显示它支持v2和v4:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v2.0.50727"/>
  <supportedRuntime version="v4.0"/>
</startup>
Run Code Online (Sandbox Code Playgroud)

然后,我将目标设置为.NET Framework 4.6.1,并在安装了.NET Framework 2.0/3.5的Win7Pro-64bit系统上运行.它显示消息"您必须首先安装以下版本的.NET Framework之一",并且仅列出了v4.0.30319.

然后,我将目标设置为.NET Framework 2.0,并在安装了.NET Framework 4.0的Win10Pro-64bit系统上运行.它显示一条消息,我必须"NET Framework 3.5"或我的应用程序可能无法正常工作.我尝试了"跳过这个"选项,但应用程序无效.

根据目标在系统上运行,应用程序运行正常.

为什么它不会只使用任何可用的框架,因为它被指定为支持两者

mag*_*eos 3

在 App.Config 中,您可以指定可以支持的运行时版本。

https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-configure-an-app-to-support-net-framework-4-or-4-5

<configuration>  
  <startup>  
    <supportedRuntime version="v1.1.4322"/>  
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
  </startup>  
</configuration>  
Run Code Online (Sandbox Code Playgroud)

与任何事情一样,您应该测试您的应用程序实际上可以在所有指定版本上运行。