2011-04-07 10 views
25

Estoy intentando migrar nuestro sitio web de .Net 3.5 a 4 y me encuentro con un problema muy extraño.C# Error "No es compatible con el idioma" después de la migración a .Net4

código que funciona muy bien en 3.5 no hace más una vez me meta .Net4, y me da el error

"xxx no es compatible con el lenguaje".

TimeZoneInfo tzi = !calendarItem.UseUserTimeZone ? user.Settings.TimeZoneInfo : l.TimeZoneItem.Info; 

En esa línea de código del error muestra en ".TimeZoneInfo" y ".Info" ambos de tipo "System.TimeZoneInfo".

Definición de user.Settings.TimeZoneInfo propiedad es:

public TimeZoneInfo TimeZoneInfo 
{ 
    get { return World.TimeZones[Convert.ToInt32(this[Setting.TimeZoneInfo])].Info; } 
    set { this[Setting.TimeZoneInfo] = value.ToTimeZoneItem().Id.ToString(); } 
} 

Definición de l.TimeZoneItem.Info propiedad es:

public TimeZoneInfo Info 
{ 
    get { return info; } 
} 
No

muy seguro de lo que está pasando aquí. Necesito ayuda en eso, por favor.

+27

que he tenido que esto ocurra cuando no me aclaro mi bin y un cierto ensamblaje no lo haría reconstruir por alguna razón ... borrarlo manualmente del directorio bin hizo el truco sin embargo. –

+2

De acuerdo con John ... limpia tu construcción. Asegúrese de que no haya nada en el contenedor y vuelva a generarlo. Así es como lo resolví la última vez. – sajoshi

+0

Eso ayudó a reducir el problema a un ensamblaje de terceros que estamos utilizando. Estoy tratando de encontrar una versión compatible con .Net 4. Publicaré con mis hallazgos. – Lancelot

Respuesta

1

Podría ser útil llamar al campo de propiedad de forma diferente. Porque TimeZoneInfo también es una clase en el espacio de nombres del sistema.

+3

Las propiedades tienen explícitamente permitido tener el mismo nombre que el tipo que "contienen". –

+0

No dice que el problema esté relacionado con la ambigüedad entre la propiedad y el nombre de tipo, sino porque TimeInfoZone también está en el espacio de nombres (bastante global) 'System'. – ReFocus

19

Probablemente sea un problema de incoherencia en el ensamblaje. Tuve este problema cuando quería usar un ensamblado que creaba una referencia circular con otro proyecto. Una vez que arreglé este problema de referencia circular, el error ya no apareció.

5

Esto también ocurre cuando una biblioteca inferior está utilizando una versión diferente de .NET Framework. Tuve un problema similar y cuando actualicé el marco de las Bibliotecas Inferiores al 3.5 y la biblioteca real al marco 3.5 el problema desapareció.

1

Similar a la respuesta de Jonathan Perry, en mi caso tenía una referencia a un ensamblaje antiguo, no el compilado. Eliminé la referencia y la agregué nuevamente señalando la dll correcta.

0

Similar a otros aquí, si el ensamblado al que se hace referencia está dirigido a 'Cualquier CPU', mientras que el ensamblaje actual está dirigido a 'Cualquier CPU' causará el problema (al menos en una máquina de 64 bits).

1

Al igual que algunas de las otras publicaciones, en mi caso me faltaba por completo una referencia a un conjunto. No se accedió directamente desde el proyecto con el que estaba trabajando, pero se accedió a otro proyecto vinculado al que estaba haciendo referencia.

0

Esto también sucede cuando una asamblea que falta es la que se hace referencia por alguna otra asamblea en su proyecto

Cuestiones relacionadas