2009-08-13 18 views
27

Estoy tratando de usar el sistema de proyecto predeterminado de VS08SP1 para invocar una compilación de C# en modo x64 explícito (a diferencia de AnyCpu). Cuando me marca explícitamente un módulo como x64, aparece un:MSBUILD/csc: Manera más limpia de x64 mscorlib warning 1607

advertencia CS1607: generación Asamblea - Referido montaje 'mscorlib.dll' se dirige a un procesador diferente

Una forma de eliminar es decir, con a /nowarn:1607. Based on my research, no hay problemas en la práctica al hacer esto. Si alguien puede encontrar un problema en el mundo real que haya encontrado, por favor no dude en responder.

Sin embargo, esto simplemente se siente mal! Así que otro enfoque que utilicé fue hacer /nostdlib+, y luego añadir un <Reference> con un codificado <HintPath> a la mscorlib explícitamente 64 bits:

<Reference Include="mscorlib"> 
    <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath> 
</Reference> 

Esto funciona y es probablemente mejor (a menos que alguien le interesa señalar razones por las que el anterior enfoque es mejor), pero ¿alguien puede confirmar que esto es algo apropiado para hacer, con suerte citando algo autoritario?

+0

Estoy encontrando el mismo problema. Estaría interesado en la solución. Gracias. – decasteljau

Respuesta

5

Encontré cambiando el marco de destino de mi proyecto a .NET Framework 4 eliminó la advertencia.

+1

+1 Pero pasar a un CLR diferente y VS es hacer trampa: P (Serioulsy, gracias por tomarse el tiempo para responder) –

+0

Al aceptar finalmente - Si bien esto no responde la pregunta real, esta es la solución que en realidad terminé usando, y Supongo que es más o menos la "respuesta" idiomática en este ecosistema ... –

+2

Esto no es una solución al problema de ninguna manera. Tal vez le haya funcionado a Todd, pero muchos proyectos no se pueden cambiar simplemente para apuntar a un marco diferente. – xxbbcc

3

Creo que su segunda opción (referencia explícita con /nostdlib+) es mejor, porque no suprimirá esta advertencia si tuviera que hacer referencia a otros ensambles no construidos en la misma plataforma.

+0

+1 perspicaz (Primero leí que no estaba seguro). Me abstendré de aceptar mi clasificación exigente: P (En serio: estoy interesado en escuchar cualquier aspecto negativo de mi segundo enfoque; pensarías que VS lo dejaría en incumplimiento si no hay inconvenientes). Sin embargo, supongo que desde una perspectiva 'msbuild', tiene mucho sentido, y' csc' no debería tener toda esta política integrada directamente en la herramienta –

+1

No puedo pensar en ningún inconveniente a menos que esté compilando en un cuadro x86 eso podría no tener la asamblea en ese camino. –

+0

en lo que se refiere a msbuild (realmente equipo compilado), mi preferencia sería ejecutar cada compilación de plataforma en esa plataforma. –

9

In this blog me encontré con una propuesta que es demasiado largo para copiarlo en su totalidad por aquí, pero en definitiva la idea puede ser descrito con un resumen adaptado de this comment:

En el archivo del proyecto, se puede definir una variable personalizada en la sección PropertyGroup para cada configuración de compilación. Ejemplo:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> 
    <MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath> 
</PropertyGroup> 

Sólo añadir una etiqueta tal como

<Reference Include="System.Data"> 
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference> 

y luego usar la macro para definir la trayectoria de referencia. Puede definir MyCustomPath en una ubicación diferente para diferentes configuraciones de compilación (plataforma y/o depuración/versión).
El problema no existiría si MS soportara esto en la interfaz de usuario VS, pero hasta entonces esto funcionará. Uso esta técnica para hacer referencia a diferentes versiones de los mismos ensamblajes en mis versiones de depuración &. ¡Funciona genial!

En la recitación anterior recuperé la etiqueta que se perdió en el comentario de la fuente y cambié la redacción para que fuera algo más detallada.


Un dato interesante adicional de la same blog:

Hay algunas otras maneras de hacer esto, sino que también requieren una para editar manualmente los archivos de proyecto.Una forma es especificar condiciones para las secciones de PropertyGroup. Esta pregunta StackOverflow resalta el uso de condiciones.

+0

+1 En mi caso, no necesito esta técnica, siempre quiero 'x64'. Aún dejando la pregunta inaceptable, me gustaría saber qué recomendaría Microsoft como una forma de manejar un error incorporado (sin tener que tolerar su horrible software de foro: P) –

0

En mi caso, tuve esta advertencia porque tenía una combinación de proyectos x86 y x64 en mi solución. Si creo configuraciones de compilación x86 en todos mis proyectos y apunto a eso para la compilación, las advertencias desaparecen. Sin embargo, si quisiera apuntar a x64 en total, creo que tendría que reconstruir el proyecto (o seguir los consejos anteriores) para volver a trabajarlos para el marco x64.

Cuestiones relacionadas