2012-04-19 43 views
5

Tengo una biblioteca de clases firmada para la que quiero crear ensamblajes a través de la herramienta sgen. Sin embargo, me da un error cuando trato de ejecutar el siguiente comando:No se puede generar una clase temporal: error criptográfico al firmar el ensamblado

$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
Error: Unable to generate a temporary class (result=1).
error CS1548: Cryptographic failure while signing assembly '[...path...]\TestSign.XmlSerializers.dll' -- 'Error signing assembly - - The parameter is incorrect. '

If you would like more help, please type "sgen /?".

he comprobado el error en MSDN que establece que

CS1548 occurs when assembly signing fails. This is usually due to an invalid key file name, an invalid key file path, or a corrupt key file.

Sin embargo, acabo de crear la clave, la ruta es correcta y que yo sepa, Visual Studio 2010 no crea claves corruptas.

Este problema es bastante simple de reproducir.

  1. Usando el código pasted here cree una nueva biblioteca de clases.
  2. Cree dos clases, una class TestSigning y uno class Model
  3. Ir al proyecto propiedades> Firma y comprobar el "Firme esta asamblea"
  4. crear un nuevo archivo de clave de nombre seguro
  5. abren en Visual Studio Comando (2010)
  6. localice el archivo DLL y ejecutar sgen /a:<dllname> [... as above ...]

Mi conjetura es algo con la clave pública del archivo de claves .. pero no puedo encontrar ninguna fuente en cuanto a cómo informo sgen de la contraseña que he usado para proteger mi archivo de clave.

No estoy seguro de cómo proceder. los otros hilos que he visto aquí en SO tienen el mismo "encabezado" de error unable to generate temporary class pero diferentes detalles de error, para los cuales ninguno tiene el Cryptographic failure (que he encontrado).

Respuesta

3

Siguiendo las instrucciones en this thread ha resuelto este problema. Aunque no se realizó manualmente con la herramienta sgen, se realizó a través de Visual Studio.

Es decir, el ejemplo anterior se cambia a:

  1. como antes
  2. como antes
  3. como antes
  4. como antes
  5. Ir a la ficha Generar
  6. Ajuste el Generar conjunto de serialización a En
  7. Haga clic derecho en el proyecto y seleccione proyecto Unload
  8. Haga clic derecho en el proyecto y seleccione Editar * ** nnn.csproj
  9. pegar el siguiente fragmento de alguna parte

    <PropertyGroup> 
        <SGenUseProxyTypes>false</SGenUseProxyTypes> 
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget> 
    </PropertyGroup> 
    
  10. Actualizar y construir el proyecto.

+0

no funciona :) El mismo problema que persiste @Default –

+0

funcionó hace 3 años cuando me envió esta respuesta. Si tiene un problema, ¿puedo sugerir que publique una nueva pregunta? (si lo desea, puede vincular esta pregunta y explicar por qué no le ayudó para que no se cierre como un duplicado) – Default

1

Inicialmente pude construir proyectos sin ningún problema. Fue bastante extraño cuando no se pudo construir/publicar otro proyecto simple y arrojó este error en su lugar.

Pude compilar esto después de ejecutar Visual Studio como Administrador.

Referencia: Gordon's 3log

Cuestiones relacionadas