2009-04-28 31 views
8

Tenemos un conjunto de componentes COM desarrollados en VC++. Cuando se agrega una referencia a dicho componente a un proyecto .NET, Visual Studio genera un ensamblado de interoperabilidad. Tenemos un conjunto de tales asambleas ahora.¿Se deben firmar los ensamblados de interoperabilidad?

Al ejecutar nuestra creación diaria, firmamos todos los binarios producidos con una firma digital. Los ensamblajes de interoperabilidad no están firmados ya que no creemos que seamos los autores, cualquiera puede usar Visual Studio y producir los mismos ensamblajes.

¿Deberíamos firmar los conjuntos de interoperabilidad también? ¿Deberíamos también firmarlos con un nombre fuerte (utilidad sn.exe)? ¿Cuáles son las razones para hacerlo?

Respuesta

8

Esto ha sido un equilibrio complicado durante algún tiempo. El problema surge del hecho de que necesita distribuir sus ensamblajes de interoperabilidad con su código y, puede estar firmando sus propios ensamblajes. Si firma su ensamblaje, todos los ensamblajes a los que hace referencia también deben estar firmados, incluidos los ensamblajes Interop. Entonces debes firmarlos.

Si está distribuyendo una aplicación independiente, entonces no hay riesgo y debe seguir adelante y firmar los ensamblajes para hacer su vida más fácil.

Si está distribuyendo bibliotecas de componentes, las cosas pueden ser un poco más complicadas ya que otro desarrollador que use sus bibliotecas podría generar sus propios ensamblajes de interoperabilidad pero firmarlos con sus propias claves. Esto causa todo tipo de problemas de naming y dependencia.

Dependiendo de la complejidad de sus ensamblajes Interop, puede generar el código proxy en un archivo .CS/.VB separado y compilarlo directamente en su ensamblado. Entonces no tendrá que preocuparse por los problemas de nombres fuertes.

+0

He publicado una pregunta de seguimiento sobre la generación de proxies de interoperabilidad COM a C# código fuente: http://stackoverflow.com/questions/1058289/how -do-i-generate-com-interop-proxies-into-c-source-code –

3

Utilizamos Sn.exe para denominar con fuerza nuestros ensamblados de interoperabilidad producidos por las herramientas como envoltorios alrededor de objetos COM. Tenemos que hacer esto ya que los ensamblajes que los están cargando están firmados, por lo tanto, deben firmarse.

para generar los ensamblados de interoperabilidad que utilizamos:

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 

eliminar Obviamente/delaysign si usted está firmando totalmente.

En cuanto a no autorizar a los assmeblies, este podría ser el caso, pero usted es responsable de ellos. Desea asegurarse de que nadie los sustituya (accidentalmente o no), por lo que probablemente deba aplicar el mismo nivel de firmas/nombres fuertes a medida que aplica a su otro código.

0

Sustituir "clave pública" por "archivo de claves":

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 
+0

¿Y qué ocurre? – sharptooth

Cuestiones relacionadas