如何将C#应用程序分发到具有未知.Net版本的计算机?

如何将C#应用程序分发到具有未知.Net版本的计算机?,.net,distribution,cil,native-code,.net,Distribution,Cil,Native Code,我编写了一个小应用程序,需要分发到700多台计算机上,问题是这些计算机可以运行任何版本的Windows(尽管很可能是XP或更高版本),任何版本的.Net framework都安装有internet连接,从OC3到拨号 我曾考虑将.Net与我的应用程序捆绑在一起,但.Net安装程序的容量至少为39mb,对于有拨号功能的人来说,这实际上需要几个小时 那么,有没有一种方法可以捆绑应用程序所需的特定DLL,或者将整个过程转换为本机代码 谢谢 --迈克使用安装程序 Microsoft提供了一个基本解决方案

我编写了一个小应用程序,需要分发到700多台计算机上,问题是这些计算机可以运行任何版本的Windows(尽管很可能是XP或更高版本),任何版本的.Net framework都安装有internet连接,从OC3到拨号

我曾考虑将.Net与我的应用程序捆绑在一起,但.Net安装程序的容量至少为39mb,对于有拨号功能的人来说,这实际上需要几个小时

那么,有没有一种方法可以捆绑应用程序所需的特定DLL,或者将整个过程转换为本机代码

谢谢 --迈克

使用安装程序

Microsoft提供了一个基本解决方案,您可以检查依赖项(如果缺少依赖项,请安装它们),以确保部署应用程序的计算机满足应用程序的最低框架(和依赖项)要求

如果需要更复杂的内容,可以使用,或

但是,请记住,如果要创建.NET应用程序,用户将需要以某种方式安装运行时。安装程序通过不强迫你将.NET安装程序与你的应用程序捆绑在一起而使事情变得更好。它将允许用户在安装时下载.NET运行时


如果你想删除对.NET Framework的依赖,那么你必须用编译成本机代码的东西重写你的应用程序(即使NGEN在没有安装该框架的情况下也无法工作)。

如果他们没有你需要的运行时环境,你就很难找到.NET解决方案。使用安装程序,您可以安装适当的运行时环境(如果不存在)

事实上,如果您非常担心人们下载部分框架,那么最好不要使用它。在用本机代码重写应用程序之前,我会仔细看看你的用户,看看他们没有本机代码的可能性有多大,以及他们的连接速度有多快

如果您不想用本机代码编写它,那么您的另一个赌注是使用较低版本的框架。1.1版的市场渗透率将比4.0版大得多。

来自(不是绝对权威,但在这类事情上通常是可靠的):

Windows Vista包括.NET Framework的3.0版

所以Windows7也会包括这个

因此,你真正需要担心的只是你的XP客户端


我最近不得不重新安装Windows XP,在我安装了SP3和所有后续补丁的时候,我也安装了.NET 3.5。虽然在安装Visual Studio时,我不能100%保证每个人都会安装必需的.NET版本,但这将是一个很大的比例,因此您可能会过度担心。

这是可能的,但不是一种简单或廉价的方法

例如,请参见
不要使用.NET。如果您无法控制环境,需要广泛的发行版,并且不希望需要30 MB的下载,那么您将很难使用本机代码。你最好的选择是C++。
或者,正如其他人所建议的,您可以尝试使用Remotesoft之类的软件。

但是,这不会阻止客户端在没有大型框架的情况下需要下载该框架。对于(a)使用拨号上网的用户百分比(仅占美国所有用户的10%),(b)还没有该框架,以及(c)没有其他获取框架的方法。您实际上没有安装框架,如果在所有需要的DLL上将Copy local设置为true,然后将它们打包到install@msarchet:这是不正确的。必须安装框架才能运行.NET应用程序。恐怕,完全XCOPY部署.NET应用程序(意味着不要求框架出现在目标机器上)是100%不可能的。@msarchet:这太荒谬了。这就像说你不需要基础来建造房子!次要的一点是,我不确定1.1是否是一个好的选择,我认为它没有安装在较新的Windows版本上,因此如果有人开始使用最常见的.Net版本,他们可能应该在他们的用户群中研究1.1和2.0。在阅读了评论并做了更多的研究之后,这个问题确实没有解决方案,除了尽可能以最低的.net版本为目标之外。