我正在使用Web部署API来部署Web包(.zip文件,由MSDeploy.exe创建),以编程方式将包滚出到服务器(在我们发布包之前,我们需要做一些其他的事情。这就是为什么我们不能一次性使用MSDeploy.exe。
这是我的代码。我的问题是要澄清执行时发生的事情。在包参数XML文件中,我指定了应用程序名称(“默认网站”),但就此而言,那里没有指定其他参数。从测试服务器看来,包已成功部署,但我的问题是我正在部署的服务器上的任何其他设置,在我不知情的情况下进行更改,是否发布了任何默认设置等?安全设置,目录浏览等等我可能不知道的事情?这里的代码似乎部署了包,但是当我不确定这个API是如何工作的时候,我很担心在生产环境中使用它。 MS文档没有帮助(实际上更像是不存在的)。
DeploymentChangeSummary changes;
string packageToDeploy = "C:/MyPackageLocation.zip";
string packageParametersFile = "C:/MyPackageLocation.SetParameters.xml";
DeploymentBaseOptions destinationOptions = new DeploymentBaseOptions()
{
UserName = "MyUsername",
Password = "MyPassword",
ComputerName = "localhost"
};
using (DeploymentObject deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.Package,
packageToDeploy))
{
deploymentObject.SyncParameters.Load(packageParametersFile);
DeploymentSyncOptions syncOptions = new DeploymentSyncOptions();
syncOptions.WhatIf = false;
//Deploy the package to the server.
changes = deploymentObject.SyncTo(destinationOptions, syncOptions);
}
如果有人可以澄清这个代码段应该将软件包部署到服务器上的网站应用程序,而不更改任何现有的服务器设置(除非在SetParameters.xml文件中指定),这将非常有用。任何有关使用API的良好资源或对幕后Web部署工作方式的解释也将非常感激!
答案 0 :(得分:2)
setparameters文件只控制包中定义的参数的值。一个包可能比这更多。 Web部署具有提供者的概念,并且任何给定的包可以具有一个或多个提供者。
如果要确保软件包不更改服务器端设置,您可以采用的最佳方法是使用API,但通过Web管理服务部署软件包。这将为您带来两个好处:
另一种方法是:
在包中手动查看archive.xml并查找包中的提供程序。只要您没有看到任何可能导致服务器设置更改的提供程序,例如apphostconfig或webserver或regkey(这不是一个全面的列表),您应该是好的。 Runcommand是一个允许您执行批处理脚本或命令的提供程序。虽然它是管理员自己的一个很好的提供者,但您需要考虑是否要允许包含这些提供者的包。
您可以通过在从包创建的部署对象上调用getchildren来检查提供程序和提供程序路径,从而在代码中执行上述检查。