No tengo .NET 4.5 para descomprimir archivos zip, así que estoy usando Shell32 como esto. Pero cuando hago referencia a la dll así:

csc.exe /r:"C:\Windows\System32\shell32.dll" ...

Recibo este error:

fatal error CS0009: Metadata file 'c:\Windows\System32\shell32.dll' could not be opened -- 'An attempt was made to load
    a program with an incorrect format. '

Actualización: sin Visual Studio, solo csc.exe.

0
user6438653 20 ago. 2016 a las 13:30

2 respuestas

La mejor respuesta

Shell32 es un servidor COM que puede usar en su programa C #. Sin embargo, primero debe generar un ensamblado de interoperabilidad para convertir la biblioteca de tipos dentro de shell32.dll (la misma idea que los metadatos .NET) en declaraciones que el CLR pueda comprender. ejecutando Tlbimp.exe o, mucho más simple, agregando una referencia a la DLL en el IDE.

Siempre que haga esto desde la línea de comando y no use msbuild para obtener un archivo de proyecto .csproj compilado, entonces debe hacer lo mismo que hace msbuild, ejecutar tlbimp. Para shell32.dll, esto solo debe hacerse una vez y puede registrar la biblioteca de interoperabilidad en el control de código fuente para no tener que volver a hacerlo. Utilice / r en la biblioteca de interoperabilidad.

Por supuesto, usar el IDE o MSBuild.exe son las mejores opciones. También le ayuda a caer en el pozo del éxito, realmente desea utilizar la función Incrustar tipos de interoperabilidad para no necesitar el ensamblado de interoperabilidad en tiempo de ejecución y no tener que implementarlo. Es útil observar los comandos de compilación generados por MSBuild.

3
Hans Passant 20 ago. 2016 a las 12:45

Posiblemente porque está intentando hacer referencia a él como un ensamblado .NET.

Intentaría incluir el ensamblado usando el argumento / lib: en su lugar según ...

/lib:dir1[,dir2] Opción del compilador.

1
War 20 ago. 2016 a las 11:33