MSDeploy无法手动部署压缩包

6 c# msbuild zip web-deployment msdeploy

之前我使用msbuild.exe构建和部署Web项目

现在我想在部署之前修改一些文件,所以我使用msbuild创建一个.zip包,然后解压缩它,修改一些文件然后再次压缩它并尝试使用msdeploy进行部署.

问题是,它部署了空文件夹.当我尝试部署未修改的.zip包时 - 它工作正常.

经过长时间的挖掘,我发现,msdeploy不支持使用内置的windows zip存档器之外的压缩包.

如何在C#/ F#中使用Windows zip归档文件压缩文件?我尝试使用System.IO.Compression.ZipFile.CreateFromDirectory方法,但msdeploy仍然部署空文件夹.

在尝试部署包时,这是我得到的警告:

Warning: Skipping source dirPath (C:\TeamCity\buildAgent\MyPath) because of rule SkipInvalidSource.
The Zip package 'C:\TeamCity\buildAgent\MyPath\MyPackage.zip' could not be loaded.
Run Code Online (Sandbox Code Playgroud)

当我禁用SkipInvalidSource规则时,我收到以下错误:

Error: (12/23/2014 6:56:44 PM) An error occurred when the request was processed on the remote computer.
Error: Object reference not set to an instance of an object.
   at Microsoft.Web.Deployment.DeploymentSyncEnumerable.<Create>d__0.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)
   at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable`1 syncPassId, String syncSessionId) at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentAsyncData asyncData, Nullable`1 passId)
Error count: 1.
Run Code Online (Sandbox Code Playgroud)

有关如何正确压缩和部署项目的任何想法?

Dan*_*all 8

我有这个确切的问题.我有一堆msdeploy包,需要在包装后更新一些文件但需要预部署.

如果我使用msdeploy同步来提取包,那么参数就会得到处理 - 这是不好的,它们只是占位符,直到我知道哪个环境是目标.所以我需要解压缩包然后进行更改......到目前为止一切都很好.

但后来我重新拉了一下.然后我得到这个问题:msdeploy将不处理包含的文件夹.如果我使用msdeploy来处理提取的文件,我再次丢失参数......或者更确切地说,它们会从paramters.xml文件中过早处理.格儿.

解决方案?使用7zip ...或标准Windows拉链以外的任何东西.

例如 7z.exe a -r C:\deploys\mypackage.zip C:\extractedstuff\*


pav*_*kin 2

不要使用 zip 归档程序。您必须调用 msdeploy.exe。

bat 文件示例:

msdeploy.exe -verb:sync ^
-source:archiveDir="C:\YourAbsolutePathToTheFolderContaining_Content_DirAnd_XMLs" ^
-dest:package="ArchName.zip" ^
-declareParam:name="IIS Web Application Name",defaultValue="Default Web Site/AppName",tags="IisApp" ^
-declareParam:name="IIS Web Application Name",type="ProviderPath",scope="IisApp",match="^.*PackageTmp$" ^
-declareParam:name="IIS Web Application Name",type="ProviderPath",scope="setAcl",match="^.*PackageTmp$"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看帮助:

msdeploy -help -dest
msdeploy -help -declareParam
Run Code Online (Sandbox Code Playgroud)

和别的。另请参阅parameters.xml