3

プロセスの一部として展開先のコンピューターでカスタム タスクを実行したいので、Microsoft Web Deployment ツールと MSDeploy をカスタム プロバイダーで拡張しようとしています。一般的なドキュメントは、カスタム プロバイダーの開発以外ではかなり優れていますが、あらゆる種類の拡張を行うためのドキュメントは存在しないようで、最悪です。

私はこれを数日間調査しており、実際のドキュメントなしでプロセスにかなり深く入ることができるいくつかの断片を見つけました. プロセスをほぼハッキングしましたが、最後の問題が 1 つあります。MSDeploy がカスタム プロバイダーを認識しません。

Microsoft.Web.Deployment.DeploymentProviderFactory を拡張する 2 つのクラスを作成しました (このクラスには、カスタム プロバイダー「archimedes」の名前にオーバーライドされた Name プロパティと FriendlyName プロパティの両方があります)。もう 1 つは、オーバーライドされた Name プロパティ "archimedes" を持つ Microsoft.Web.Deployment.DeploymentObjectProvider を拡張します。これは、オンラインで見つけることができるカスタム 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 が表示され、 Extensibility フォルダーにダンプしたアセンブリ ファイルからプロバイダー ファクトリを呼び出しますが、実際の msdeploy/webdeploy には表示されません。誰にもアイデアはありますか?

ありがとうございます...

4

1 に答える 1

3

OK、これは単純な間違いでしたが、パッケージ構築部分がコードに問題なくアクセスし、プロバイダー アセンブリから呼び出したため、明らかではありませんでした。問題は、Web アプリケーションのほぼすべてが 4.0 フレームワークを対象としているため、カスタム プロバイダー コードを使用して追加したクラス ライブラリ プロジェクトも同様に 4.0 フレームワークを対象としていたことです。ターゲット フレームワークを 2.0 に設定する必要があり、すべてが機能し始めました。エラー報告はどれも過度に明白ではありませんでした。

于 2010-11-02T17:24:59.623 に答える