2 votos

Firma del complemento de ArcGIS con un evento posterior a la construcción

Estoy intentando automatizar la firma de un complemento de ArcGIS mediante un evento posterior a la construcción en Visual Studio que activa un archivo por lotes (que posteriormente activa la utilidad ESRISignAddIn). Ejecutando el archivo por lotes manualmente a través de la línea de comandos funciona bien, el complemento se firma con éxito. Sin embargo, si intento ejecutar el archivo por lotes en el evento post-construcción, devuelve un error diciendo que el archivo del complemento no se puede encontrar. Me he dado cuenta de que cuando el proceso de construcción llega a la etapa posterior a la construcción, sólo se crean las DLL, pero no el archivo del complemento, por lo que el archivo por lotes no lo encuentra. Parece que el archivo del complemento se crea DESPUÉS del evento de post-construcción (ilógico, lo sé).

He probado a añadir los comandos por lotes a la línea de comandos de los eventos posteriores a la construcción (en la configuración del proyecto > compilación > eventos de construcción), y también he probado a añadir esto directamente al archivo XML del proyecto:

<Target Name="AfterBuild">
    <Exec Command="&quot;$(ProjectDir)Post_Build.bat&quot; &quot;$(TargetDir)my.esriAddIn&quot;" />
</Target>

Parece que los eventos 'post build' y 'after build' se ejecutan antes de que se construya el archivo esriaddin, ¡inútil!

¿Alguien ha tenido alguna experiencia trabajando con eventos post-construcción y complementos de ArcGIS? Quiero saber si es posible forzar la creación del archivo Add-In (my.esriaddin) antes del evento post-build.

Mi solución de último recurso es ejecutar la construcción y luego el archivo por lotes utilizando un corredor de construcción (por ejemplo, finalbuilder), pero idealmente me gustaría mantener todo en el mismo proyecto.

2voto

William Puntos 1078

Tuve un problema similar en el que necesitaba copiar el archivo de salida del complemento a otro directorio usando un evento post-construcción. Al igual que tú, tuve un problema en el que el archivo del complemento no había sido creado en el momento en que se disparó el evento post-construcción.

Creo que puedo tener una solución para usted. En lugar del objetivo que está utilizando arriba, pruebe esto:

  <Target AfterTargets="RunArcGISPostPackageEvent" Name="SignMyAddin">
    <Exec Command="&quot;$(ProjectDir)Post_Build.bat&quot; &quot;$(TargetDir)my.esriAddIn&quot;" />
  </Target>

Para mayor claridad, en mi archivo .csproj tengo una importación (presumiblemente añadida por Esri) que dice esto:

<Import Project="$(MSBuildExtensionsPath)\ESRI\ESRI.ArcGIS.AddIns.targets" Condition="Exists('$(MSBuildExtensionsPath)\ESRI\ESRI.ArcGIS.AddIns.targets')" />

Si abro ese archivo importado, hay un objetivo con el nombre RunArcGISPostPackageEvent, que por lo que veo es lo último que hace Esri para terminar de crear el archivo *.addin. Así que usando el atributo AfterTargets en un objetivo personalizado esperará hasta después de que ese otro objetivo haya terminado antes de ejecutarse. Si lo anterior no funciona, puede intentar AfterTargets=PackageArcGISAddInContents ya que es otro objetivo en el proyecto importado.

No soy un experto así que puede haber una forma mejor, pero esto me ha funcionado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X