2010-11-01 38 views
3

J'essaie d'étendre l'outil Microsoft Web Deployment et MSDeploy avec un fournisseur personnalisé car je souhaite exécuter des tâches personnalisées sur la machine de déploiement de destination dans le cadre du processus. La documentation générale est assez bonne en dehors du développement de fournisseur personnalisé, mais la documentation pour faire n'importe quelle sorte d'extension semble être inexistante vers abysmal.Comment intégrer des fournisseurs personnalisés dans Microsoft Web Deployment Tool?

Je fais des recherches depuis plusieurs jours maintenant et j'ai trouvé quelques éléments qui m'ont permis d'aller assez loin dans le processus sans aucune vraie documentation. J'ai presque piraté mon chemin à travers le processus, mais maintenant j'ai un dernier problème: MSDeploy ne reconnaîtra pas mon fournisseur personnalisé.

J'ai créé deux classes dont une qui étend Microsoft.Web.Deployment.DeploymentProviderFactory (dont les propriétés Name et FriendlyName sont remplacées par le nom de mon fournisseur personnalisé "archimedes"); l'autre étend Microsoft.Web.Deployment.DeploymentObjectProvider qui a également une propriété de nom surchargé "archimedes". Je l'ai fait en suivant l'exemple personnalisé BatchProvider que vous pouvez trouver en ligne. Il ressemble à ceci:

ArchimedesProviderFactory (qui étend DeploymentProviderFactory et a l'attribut de déploiement ProviderFactory attribué à la classe):

public override string FriendlyName 
{ 
    get { return "archimedes"; } 
} 

public override string Name 
{ 
    get { return "archimedes"; } 
} 

La classe ArchimedesProvider étend DeploymentObjectProvider et a ceci:

public override string Name 
{ 
    get { return "archimedes"; } 
} 

En mon fichier sourcemanifest.xml Je l'ai ajouté une entrée:

<archimedes path="..." /> 

J'ai placé le fichier d'assemblage qui contient ces classes dans% program% \ IIS \ Microsoft Web Deploy \ Extensibility comme je l'ai été également indiqué par le matériel que j'ai trouvé en ligne. Ce qui est amusant, c'est que lors de la construction d'un paquet dans Visual Studio 2010, mes fournisseurs reçoivent du code à partir de ce répertoire - donc VS se connecte définitivement à mon assembly placé là d'une façon ou d'une autre exceptions et voir qu'ils ont été jetés au cours du processus de construction d'un paquet).

Toutefois, lors du déploiement de test réel du package à partir du fichier .cmd généré, j'obtiens une erreur indiquant que la fabrique du fournisseur "archimedes" est introuvable. taper aussi:

MSDeply -verb:dump -source:archimedes -debug 

Renvoie les éléments suivants:

Microsoft.Web.Deployment.DeploymentException: Unknown factory 'archimedes'. 
    at Microsoft.Web.Deployment.DeploymentProviderSettingCollection..ctor(String factoryName) 
    at Microsoft.Web.Deployment.DeploymentProviderOptions..ctor(String factoryName) 
    at MSDeploy.MSDeploy.GetObjectParameters(Dictionary`2 parameters, Boolean isDestination, DeploymentBaseOptions& retbaseOptions, DeploymentProviderOptions& re 
tproviderOptions) 
    at MSDeploy.MSDeploy.ExecuteWorker() 
    at MSDeploy.MSDeploy.Execute() 
    at MSDeploy.MSDeploy.Main(String[] unusedArgs) 
Error count: 1. 

Ainsi, en plus du fait qu'il semble y avoir aucune source centrale cohérente, de la documentation pour le développement de fournisseur personnalisé (personne ne sait d'un lieu, s'il vous plaît Dire si vous en avez trouvé un), mon problème principal est que pour une raison quelconque, Visual Studio verra et appellera mon fournisseur à partir du fichier d'assemblage que j'ai jeté dans le dossier Extensibility, mais le msdeploy/webdeploy ne le voit pas. Quelqu'un a-t-il une idée?

Merci une tonne ...

Répondre

3

OK, ce fut une simple erreur, mais un non évidente depuis la partie du bâtiment paquet accessible le code bien et a appelé de mon assemblage fournisseur. Le problème était que puisque presque tout dans l'application Web cible le framework 4.0, le projet de bibliothèque de classes que j'ai ajouté avec le code du fournisseur personnalisé l'a également fait. J'ai dû définir le framework cible sur 2.0 et tout a commencé à fonctionner.Aucun des rapports d'erreurs n'était trop évident.

+0

Pouvez-vous appeler un Web Deploy distant sur votre fournisseur personnalisé? Et as-tu fait quelque chose de * spécial * pour le faire tourner? –