3

我正在尝试使用自定义提供程序扩展 Microsoft Web 部署工具和 MSDeploy,因为我想在目标部署计算机上运行自定义任务作为流程的一部分。在自定义提供程序开发之外,通用文档非常好,但是用于进行任何类型扩展的文档似乎不存在,非常糟糕。

我已经研究了好几天了,并且发现了一些零碎的东西,这些零碎的东西让我在没有任何真实文档的情况下就可以深入了解这个过程。我几乎已经完成了整个过程,但现在我遇到了最后一个问题: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="..." />

我已将包含这些类的程序集文件放在 %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 会看到和从我转储到可扩展性文件夹中的程序集文件中调用我的提供程序工厂,但实际的 msdeploy/webdeploy 没有看到它。有没有人有任何想法?

万分感谢...

4

1 回答 1

3

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

于 2010-11-02T17:24:59.623 回答