之前我使用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.
当我禁用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.
有关如何正确压缩和部署项目的任何想法吗?
答案 0 :(得分:8)
我遇到了这个问题。我有一堆msdeploy软件包,需要在包装后更新一些文件,但需要预先部署。
如果我使用msdeploy同步来提取包,那么参数就会被处理 - 这没有好处,它们只是占位符,直到我知道哪个环境是目标。所以我需要解压缩包然后进行更改......到目前为止一切都很好。
然后我把它全部重新压缩。然后我得到了这个问题:msdeploy不会处理包含的文件夹。如果我使用msdeploy来处理提取的文件,我再次丢失参数......或者更确切地说,它们会从paramters.xml文件中过早处理。 GRR。
解决方案?使用7zip ...或标准Windows拉链以外的任何东西。
e.g。
7z.exe a -r C:\deploys\mypackage.zip C:\extractedstuff\*
答案 1 :(得分:2)
不要使用zip存档。 您必须调用msdeploy.exe。
bat-file示例:
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$"
有关详情,请查看帮助:
msdeploy -help -dest
msdeploy -help -declareParam
等。另请参阅 parameters.xml
答案 2 :(得分:0)