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

时间:2017-12-08 20:02:12

标签: c# .net

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

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

using System;
using System.Diagnostics;
using System.IO;

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

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

更新

根据建议的答案和article,我更新了App.config以显示它支持v2和v4:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v2.0.50727"/>
  <supportedRuntime version="v4.0"/>
</startup>

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

https://docs.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>  

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

答案 1 :(得分:0)

不是app.config(字面意思),而是myappname.exe.config,例如C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe.config