我想用自定义提供程序扩展Microsoft Web部署工具和MSDeploy,因为我想在目标部署计算机上运行自定义任务作为此过程的一部分。通用文档在自定义提供程序开发之外是相当不错的,但用于进行任何类型扩展的文档似乎并不存在,而且还是非常糟糕。如何将自定义提供程序集成到Microsoft Web部署工具中?
我一直在研究这个问题已经有好几天了,并且发现了一些让我在没有任何真实文档的情况下可以深入到过程中的东西。我差点破解了整个过程,但现在我遇到了最后一个问题:MSDeploy无法识别我的自定义提供程序。
我创建了两个扩展Microsoft.Web.Deployment.DeploymentProviderFactory的类(它将Name和FriendlyName属性重写为我自定义提供程序的名称“archimedes”);另一个扩展了Microsoft.Web.Deployment.DeploymentObjectProvider,它也有一个被重写的Name属性“archimedes”。我按照您可以在线查找的自定义BatchProvider示例执行此操作。它看起来像这样:
ArchimedesProviderFactory(其延伸DeploymentProviderFactory并且具有分配给类部署ProviderFactory属性):
public override string FriendlyName
{
get { return "archimedes"; }
}
public override string Name
{
get { return "archimedes"; }
}
的ArchimedesProvider类扩展DeploymentObjectProvider,并且具有这样的:
public override string Name
{
get { return "archimedes"; }
}
在我的sourcemanifest.xml文件我添加了一个条目:
<archimedes path="..." />
我已经将包含这些类的程序集文件放在%program files%\ IIS \ Microsoft Web Deploy \ Extensibility中,因为我在线找到的材料也是这样。
有趣的是,在Visual Studio 2010中构建一个包的过程中,我的提供程序正在从该目录调用它们的代码 - 所以VS肯定会连接到我的程序集(例如我可以抛出例外,并看到它们在构建包的过程中被抛出)。
但是,在生成的.cmd文件的实际测试包部署过程中,出现提供程序“archimedes”的工厂无法找到的错误。同时键入:
MSDeply -verb:dump -source:archimedes -debug
返回如下:
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.
因此,除了有似乎是自定义提供开发文档没有条理,中央来源的事实(有没有人知道的地方,请告诉你是否找到了),我的主要问题是出于某种原因,Visual Studio会从我转储到Extensibility文件夹中的程序集文件中看到并调用我的提供程序工厂,但实际的msdeploy/webdeploy没有看到它。有没有人有任何想法?
由于一吨...
您可以在自定义提供程序上调用远程Web部署吗?所以你做了什么*特殊*来让它运行? – 2013-05-22 09:45:17