Si un ordenador no tiene instalado .NET Framework, ¿Qué ocurrirá? ¿Se llegará a abrir el formulario?
Lo que ocurrirá es que te saldrá un msgbox de Windows advirtiéndote de que la versión de .NetFW requerida por la aplicación en cuestión no está instalada en tu equipo, y por lo tanto no se podrá iniciar, ni mucho menos se llegará a abrir el form principal.
El mensaje varía según la versión de Windows que se utilice, en Win7 si no recuerdo mal no te sale nada para descargar la versión requerida, y en XP directamente te sale un error de aplicación no válida sin información sobre el error.
La versión 3.5 de .NetFW es la versión recomendada de forma general al ser la más común en cualquier equipo, pero obviamente si usas la 3.5 no podrás usar las "nuevas" características de la librería de classes de las versiones 4.0, 4.5, 4.5.1 y 4.5.2
⇲What's New in the .NET Framework 4What's New in the .NET Framework 4.5, 4.5.1, and 4.5.2PD: Sinceramente, en mi humilde opinión personal utiliar la versión 3.5 a estas alturas... es seguir estancado en el pasado sin ningún motivo coherente, a menos que seas una compañía y tu única alternativa sea utilizar la versión 3.5 por motivos de compatibilidad en múltiples PC's o por lo que sea, como última opción.
¿Es posible que entre una versión del framework y otra, cambien las DLL? ¿Algún método de asegurarse de que un ordenador tiene instalada la versión adecuada?
Por supuesto, se van actualizando y agregando nuevas funciones y otras quedan obsoletas/eliminadas, pero cada versión de .NetFW instalada en el equipo expande sus propias dll's, es decir, una versión nueva no reemplaza las dll de versiones anteriores, así que mientras tu aplicación use un .NetFW objetivo que esté instalado en el equipo no habrá problema alguno.
Lo correcto es distribuir junto tu software o al menos indicar la versión de .Net Framework Runtimes que necesita tu aplicación para iniciarse, y proveer el paquete por separado (el instalador online no pesa ni 1 mb), o un link de descarga oficial, en fin, lo que sea, pero algo útil para el end-user.
De todas formas sí que puedes averiguar que versiones de .Net Framework están instaladas en el equipo, en tiempo de ejecución, pero ten en cuenta que la solución propuesta por el compañero KuBox no te servirá en todos los casos, por ejemplo en versiones de Windows que vengan sin .Net framework (Ej: Windows XP y todas sus versiones anteriores, al no existir dicha carpeta) o por ejemplo en Win XP con SP2 con .NetFW 2.0 instalado (aunque en este caso no se el motivo específico, pero a mi no me sale), así que otra alternativa más global es observando el registro de Windows ya que practicamente todo se almacena en el registro de Windows:
Framework Version Registry Key
1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705
1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install
2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install
3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess
3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install
Y obviamente puedes utilizar cómodas herramientas/librerías de terceros para facilitarte la tarea.
⇲Using managed code to detect what .NET Framework versions and service packs are installed(en los comentarios tienes actualizaciones del source compatible con .NetFW 4.0/4.5, yo lo uso sin problemas)
+
Librería de Snippets !! (Posteen aquí sus snippets)Telerik Online converter
¿Existe alguna manera de empaquetar librerías DLL externas en un ejecutable?
Puedes embedir diréctamente una dll desde la IDE de VS, o puedes embedirlas usando aplicaciones d eterceros que te faciliten la tarea.
Existe casi una infinidad de herramientas para dicha tarea, te recomiendo la aplicación
Smartassembly de
RedGate como solución profesional puesto que proporciona características únicas, pero si quieres algo más simple puedes utilizar .Net Shrink (de pago), o IlMerge + ILMerge GUI (gratis)
⇲SMartassembly.Net ShrinkILMergeILMerge GUINo te vendría mal pasarte por aquí
VisualStudio 2013 U. (Instalador+Plantillas+Snippets+Libs+Controles+Tools)(aunque algunas versiones tienen ya un tiempo y siempre tengo la versión más nueva de cada aplicación, pero bueno, te servirán igualmente)
le di una aplicación en C# a una persona, y la pudo ejecutar, pero no se le cargaron algunas librerías (System.NET.http entre ellas, creo).
El namespace
System.NET.Http solo está disponible a partir de .NetFW 4.5, está información está incluida en uno de los enlaces que te mostré anteriormente:
Networking
The .NET Framework 4.5 provides a new programming interface for HTTP applications. For more information, see the new System.Net.Http and System.Net.Http.Headers namespaces.
Por lo tanto deduzco que tienes .NetFW 4.5 o superior como objetivo en tu proyecto de C#, y el usuario tiene FW 4.0
Saludos.