Pregunta

Estoy tratando de utilizar el sistema de proyecto predeterminado del VS08SP1 para invocar un C # compila en modo de 64 bits explícita (a diferencia de AnyCpu). Cuando me marca explícitamente un módulo como x64, aparece un:

  

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

Una forma de eliminar esa es una /nowarn:1607. sobre la base de mi investigación , no hay problemas en la práctica con hacer esto. Si alguien puede seleccionalo un problema del mundo real que he encontrado, no dude en responder.

Sin embargo, esto sólo se siente mal! Así que otro enfoque que utilicé fue hacer /nostdlib+, y luego añadir un <Reference> con un <HintPath> codificado explícitamente a la mscorlib 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 enfoque anterior es mejor), pero alguien puede confirmar esto es algo apropiado para hacerlo, es de esperar citando algo authorative?

¿Fue útil?

Solución

He encontrado cambiando marco de destino de mi proyecto a .NET Framework 4 que elimina la advertencia.

Otros consejos

En este blog he encontrado 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 este comentario :

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

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

Sólo añadir una etiqueta como

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

y luego usar la macro para definir la trayectoria de referencia. Puede definir MyCustomPath a una ubicación diferente para diferentes configuraciones de construcción (plataforma y / o depuración / release).
El problema no existiría si MS apoyaría esta en el VS interfaz de usuario, pero hasta entonces esto va a funcionar. Yo uso esta técnica para hacer referencia a diferentes versiones de los mismos montajes en mi depuración y las versiones de lanzamiento. Funciona muy bien!

En la recitación por encima de lo recuperaron la etiqueta que se perdió en el commentarium origen y cambió la redacción para ser un poco más detallada.


Un dato interesante adicional de la mismo 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 las condiciones a PropertyGroup secciones. Este Stackoverflow cuestión pone de relieve el uso de condiciones.

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

En mi caso, he tenido esta advertencia porque tenía una mezcla de proyectos x86 y x64 en mi solución. Si creo configuraciones de construcción x86 en todos mis proyectos, y el objetivo de que para la construcción, las advertencias desaparecen. Sin embargo, si quería apuntar x64 en general, yo creo que habría que reconstruir el proyecto (o seguir el consejo anterior) para volver a trabajar para ellos x64 marco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top