如何使生成的EXE在所有.NET框架版本中都能正常工作?

我对.NET世界很新,我有一个小的控制台项目(非常小)基本上只是引用在delphi中创建的.DLL(大多数重要的代码都是),在我的C#代码上我只有循环,线程睡眠说明和类似的事情。

我的客户使用的是Microsoft Windows XP SP2,Microsoft XP SP3,Microsoft Windows Vista和Microsoft 7.我想以一种在所有这些环境中运行的方式生成.EXE。 在我使用C#2010的开发环境中,我有.NET framework 4.0,但我想我客户的一些桌面有3.5和更老的框架。 基于这种情况,在新旧版本的.NET中创建最便携的EXE的最佳选择是什么?

由于我是初学者,因此非常欢迎详细的答案。

因为它可能是我的简单代码,所以我在这里粘贴它。

using System; using System.Reflection; using System.Threading; using System.Web; using System.Diagnostics; using Redemption; namespace test{ class Program { static void Main(string[] args) { RedemptionLoader.DllLocation64Bit = @"redemption64.dll"; RedemptionLoader.DllLocation32Bit = @"redemption.dll"; var ToEmailAddress = args[0]; var subject = args[1]; var pathFileAttach = args[2]; SendMail(ToEmailAddress, subject, pathFileAttach); } private static void SendMail(string ToMail,string subject,string filePath) { var session = new RDOSession(); try { session.Logon(); if (session.LoggedOn) { var Drafts = session.GetDefaultFolder(rdoDefaultFolders.olFolderDrafts); RDOMail msg = Drafts.Items.Add("IPM.Note"); var body = "Test Redemption."; msg.To = ToMail; msg.Recipients.ResolveAll(); msg.Subject = subject; msg.Body = body; msg.Attachments.Add(filePath); msg.Save(); msg.Send(); System.Threading.Thread.Sleep(5000); } } finally { session.Logoff(); session = null; } } } } 

开发和构建.net 2.0作为目标框架,它将与所有版本兼容。

在项目菜单中,您可以选择您想要使用的.net版本(使用2.0作为Chris说)。 但要小心,因为有时通过这样做,事情可能需要一些调整。

请在此处查看可能对您很重要的更改列表

还值得注意的是,在项目属性下,您可以选择运行应用程序所需的依赖项。 在允许安装进行之前,它将检查并允许用户获取这些依赖项,例如框架的某个版本。

请注意,.NET Framework的v1.0和1.1非常难以确保与之兼容。 虽然.NET Framework的所有版本在技术上都是向后兼容的,但1.0 / 1.1首先是非常基本的(它们甚至没有generics类型),其次是某些语言和实现细节在v2.0发布时发生了显着变化实际上可能与2.0之后的框架不兼容。 Microsoft强烈推荐所有.NET 1.1。 程序被重新编译为目标2.0。

虽然在这种情况下定位2.0版本的框架可能是一个好主意,因为你有一个相当简单的应用程序,你还应该创建一个安装程序,它将检测客户端安装的.NET版本并在需要时安装正确的版本。

有多种方法可以做到这一点,但ClickOnce是Visual Studio的一部分,非常容易设置。 它不会创建大型安装exe,因为它在运行时从Microsoft下载所需的.NET版本。

构建的框架越低,应用程序的可移植性就越高。 您可以构建的框架取决于您在代码中使用的内容。 正如其他人所指出的那样,请记住,其中一些操作系统仍然需要安装相关的.NET Framework,因为它不包含在内。

.NET 2.0通常被认为是要在通用时使用的框架。 大多数代码示例都是用2.0编写的。 但是你需要意识到你不应该假设.Net将默认安装。 一些旧机器必须安装它。 现在很少有人不会有至少2.0,但除非你愿意冒险让人们无法安装你的软件而不知道为什么,否则我不会做出这样的假设。 默认情况下,Windows XP不附带.NET。