Pregunta

Estoy usando 3.5 SP1 en mi máquina, mientras que nuestros clientes actualmente usan 3.5 sin SP1. No conozco ninguna manera en VS2008 para dirigir la solución o proyecto a 3.5 sin SP1, solo los 3.5 con SP1 que he instalado.

Si utilizamos funciones o constructores no disponibles en 3.5 sin SP1, el código no funcionará correctamente.

Es decir, quiero detectar en tiempo de compilación lo que no funcionaría sin SP1.

Hasta ahora hemos realizado pruebas (en una máquina virtual o en una máquina separada) para ver si la aplicación se rompe, y a veces se rompe cuando usamos partes de la API que no están disponibles hasta SP1. El problema es que solo se rompe cuando el código realmente se ejecuta (en tiempo de ejecución), no cuando se carga el ensamblaje.

Una solución sería tener una máquina con VS2008 sin SP1 e intentar compilar el proyecto. Sin embargo, preferiría alguna herramienta que me ayudara a detectar una dependencia a 3.5 SP1 (debido al uso de una nueva API, o lo que sea), ya sea analizando el código fuente o los ensamblajes que producimos.

Mis poderes de google no han sido lo suficientemente fuertes con esta pregunta, ¿alguna pista?

¿Fue útil?

Solución

Acabo de tener el mismo problema y encontré una solución. Para nuestra aplicación, fue una llamada a System.Threading.WaitHandle.WaitOne (Int32) lo que nos metió en problemas. Para obtener más detalles sobre cómo las referencias a las API que se introdujeron en las versiones de Service Pack pueden filtrarse en su código sin que Visual Studio lo note, consulte Publicación de Krzysztof Cwalina .

La buena noticia es que, como Marc mencionó es su respuesta , FxCop tiene un nueva regla que detecta estas fugas. La mala noticia es que la regla se rompe en FxCop 1.36 cuando apunta a .NET Framework 3.5. Sin embargo, David Kean describe cómo editar un par de archivos de configuración XML en solucione el problema . Seguí las instrucciones y FxCop ahora detecta mis referencias a las API de Service Pack.

Otros consejos

¿Qué tal esto ? (reglas de orientación múltiple para FxCop)

Puede usar el código encontrado aquí para detectar los marcos .NET instalados.

string Fx35RegistryKey = @ " HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5 " ;; object Fx35ServicePack = Registry.GetValue (Fx35RegistryKey, " SP " ;, null);

if (Fx35ServicePack == null || (int) Fx35ServicePack < 1) arroja una nueva excepción (" .NET Framework 3.5 SP1 es obligatorio. ");

Hay otra opción que no he probado. El documentación de Visual Studio dice que puede hacer que su instalador ClickOnce se dirija específicamente el marco .NET 3.5SP1. Siga el enlace y busque & Quot; Orientación de .NET Framework Versión 3.5 SP1 & Quot ;. Esencialmente, dice que hacer cualquiera de lo siguiente obligará al instalador a instalar 3.5SP1:

  • Especifique una URL de error en el cuadro de diálogo Opciones de publicación.
  • Especifique un nombre de Suite en el cuadro de diálogo Opciones de publicación.
  • Cree un acceso directo de escritorio en el cuadro de diálogo Opciones de publicación.
  • Excluir un archivo del hash en el cuadro de diálogo Archivos de aplicación.
  • Desactive la casilla de verificación Firmar los manifiestos de ClickOnce en la página de Firma.
  • Agregue una referencia al ensamblado System.Data.Entity.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top