如何将自定义提供程序集成到Microsoft Web部署工具中?

时间:2010-11-01 23:26:39

标签: documentation provider web-deployment

我正在尝试使用自定义提供程序扩展Microsoft Web部署工具和MSDeploy,因为我希望在目标部署计算机上运行自定义任务作为该过程的一部分。一般文档在自定义提供程序开发之外是相当不错的,但是用于执行任何类型扩展的文档似乎都不存在于abysmal。

我已经研究了好几天了,发现了一些零碎的东西让我在没有任何真实文档的情况下进入了很长的过程。我几乎已经破解了整个过程,但现在我遇到了一个问题:MSDeploy无法识别我的自定义提供程序。

我创建了两个类,它们扩展了Microsoft.Web.Deployment.DeploymentProviderFactory(其Name和FriendlyName属性都覆盖了我的自定义提供程序名称“archimedes”);另一个扩展了Microsoft.Web.Deployment.DeploymentObjectProvider,它也有一个重写的Name属性“archimedes”。我通过遵循您可以在线找到的自定义BatchProvider示例来完成此操作。它看起来像这样:

ArchimedesProviderFactory(扩展了DeploymentProviderFactory并将Deployment 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="..." />

我已将包含这些类的程序集文件放在%程序文件%\ 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没有看到它。有没有人有任何想法?

非常感谢...

1 个答案:

答案 0 :(得分:3)

好吧,这是一个简单的错误,虽然一个非常明显的错误,因为包构建部分访问代码正常并从我的提供程序程序集调用它。问题是,由于Web应用程序中的所有内容都以4.0框架为目标,因此我使用自定义提供程序代码添加的类库项目也是如此。我不得不将目标框架设置为2.0,这一切都开始起作用了。没有任何错误报告过于明显。