我想用自定義提供程序擴展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