2017-09-16 2 views
1

J'ai un projet hérité qui utilise un OCX. J'ai dû enregistrer ledit OCX sur mon système en utilisant regsvr32.Compilez un C# WinForm qui dépend d'un ActiveX sans l'enregistrer

Maintenant, je veux que Jenkins compile le projet. Malheureusement, dans le serveur Jenkins, il n'y a pas d'OCX et je ne veux pas l'enregistrer.

Existe-t-il un moyen de distribuer l'OCX afin que le projet puisse compiler sur Jenkins? J'ai lu sur les composants sans inscription, mais il semble cibler les requeriments d'exécution, et mes problèmes sont à la compilation.

+0

Vous pouvez probablement générer l'assembly d'interopérabilité principal à l'aide de [tlbimp.exe] (https://docs.microsoft.com/en-us/dotnet/framework/interop/how-to-generate-primary-interop-assemblies-using -tlbimp-exe) et mettre à jour les références pour utiliser l'assembly. Jetez un oeil à [ce message] (https://stackoverflow.com/q/10700607/3110834) ou [celui-ci] (https://stackoverflow.com/q/7498258/3110834). –

+0

Jenkins me frappe parfois comme un virus publié par la communauté Java, visant à rendre la vie d'un programmeur C# aussi difficile que possible. Vous devez exécuter Aximp.exe pour obtenir à la fois la bibliothèque d'interopérabilité et l'encapsuleur AxHost que votre formulaire utilise. Vérifiez les deux DLL dans le contrôle de la source. Supprimez les deux références de votre projet et ajoutez-les à nouveau, en utilisant maintenant les fichiers. Revérifiez en vérifiant que le fichier .csproj ne contient plus les deux éléments 'COMReference'. Vous feriez mieux de vérifier l'installateur ou ocx dans le contrôle de la source ainsi que de minimiser la misère versioning cela provoque. –

Répondre

1

Oui, la façon de le faire est comme le dit Reza Aghaei.

Appelez tlbimp pour générer un assembly interop (il ne doit pas nécessairement être un assembly interop primaire). Ensuite, au lieu de référencer l'ocx dans le projet, vous faites référence à la DLL d'interopérabilité.

Notez que si vous souhaitez exécuter le projet ou utiliser le contrôle dans le concepteur de WinForms, vous devez toujours enregistrer l'ocx. Construire pour construire à partir de Jenkins, cela fonctionnera bien, nous utilisons cette technique pour construire notre code hérité.