Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# msdeploy包的Azure Web App部署出错_C#_Azure_Azure Web App Service_Msdeploy - Fatal编程技术网

C# msdeploy包的Azure Web App部署出错

C# msdeploy包的Azure Web App部署出错,c#,azure,azure-web-app-service,msdeploy,C#,Azure,Azure Web App Service,Msdeploy,在azure web应用程序上部署包时遇到错误 该应用程序是一个.NET web应用程序,为4.0框架编译 以下是我用于创建包的命令行: "msdeploy.exe" -verb:sync -source:dirpath="C:\Users\Pierre\Documents\Projets\MyProject\MyApp" -dest:package=C:\Users\Pierre\Documents\MyProject\AzureResourceGroup\MyApp.zip 然后,在使用a

在azure web应用程序上部署包时遇到错误

该应用程序是一个.NET web应用程序,为4.0框架编译

以下是我用于创建包的命令行:

"msdeploy.exe" -verb:sync -source:dirpath="C:\Users\Pierre\Documents\Projets\MyProject\MyApp" -dest:package=C:\Users\Pierre\Documents\MyProject\AzureResourceGroup\MyApp.zip
然后,在使用azure资源组模板进行部署时,我得到以下错误

<?xml version="1.0" encoding="utf-8"?>
<entries>
  <entry time="2016-01-06T09:55:20.4679645+00:00" type="Message">
    <message>Downloading metadata for package path 'artifacts/MyApp.zip' from blob 'https://ccfstoragee57wqq4suhjoy.blob.core.windows.net'</message>
  </entry>
  <entry time="2016-01-06T09:55:20.5148382+00:00" type="Message">
    <message>The blob has flag IsPremiumApp:. IsPremiumApp returns False</message>
  </entry>
  <entry time="2016-01-06T09:55:20.5617164Z" type="Message">
    <message>Downloading package path 'artifacts/MyApp.zip' from blob 'https://ccfstoragee57wqq4suhjoy.blob.core.windows.net'</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6280976Z" type="Message">
    <message>No parameters were populated.</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6280976Z" type="Message">
    <message>Calling SyncTo() on package.</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6280976Z" type="Message">
    <message>Adding MSDeploy.dirPath (MSDeploy.dirPath).</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6280976Z" type="Message">
    <message>Adding MSDeploy.dirPath (MSDeploy.dirPath).</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6280976Z" type="Message">
    <message>Adding directory (C:\Users\Pierre\Documents\Projets\MyProject\MyApp).</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6280976Z" type="Message">
    <message>Adding directory (C:\Users\Pierre\Documents\Projets\MyProject\MyApp).</message>
  </entry>
  <entry time="2016-01-06T09:55:30.6593714Z" type="Error">
    <message>Package deployment failed</message>
  </entry>
  <entry time="2016-01-06T09:55:30.7267862Z" type="Error">
    <message>AppGallery Deploy Failed: 'Microsoft.Web.Deployment.DeploymentDetailedUnauthorizedAccessException: Unable to perform the operation ("Create Directory")  for the specified directory ("C:\Users\Pierre\Documents\Projets\MyProject\MyApp"). This can occur if the server administrator has not authorized this operation for the user credentials you are using.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER. ---&gt; Microsoft.Web.Deployment.DeploymentException: The error code was 0x80070005. ---&gt; System.UnauthorizedAccessException: Access to the path 'C:\Users' is denied.
   at Microsoft.Web.Deployment.NativeMethods.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath)
   at Microsoft.Web.Deployment.DirectoryEx.CreateDirectory(String path)
   at Microsoft.Web.Deployment.DirPathProviderBase.CreateDirectory(String fullPath, DeploymentObject source)
   at Microsoft.Web.Deployment.DirPathProviderBase.Add(DeploymentObject source, Boolean whatIf)
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
   at Microsoft.Web.Deployment.FilePathProviderBase.HandleKnownRetryableExceptions(DeploymentBaseContext baseContext, Int32[] errorsToIgnore, Exception e, String path, String operation)
   at Microsoft.Web.Deployment.DirPathProviderBase.Add(DeploymentObject source, Boolean whatIf)
   at Microsoft.Web.Deployment.DeploymentObject.Add(DeploymentObject source, DeploymentSyncContext syncContext)
   at Microsoft.Web.Deployment.DeploymentSyncContext.HandleAdd(DeploymentObject destObject, DeploymentObject sourceObject)
   at Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(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.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncOptions)
   at Microsoft.Web.Deployment.DeploymentObject.SyncTo(String provider, String path, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncOptions)
   at Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentWellKnownProvider provider, String path, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncOptions)
   at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.Deploy(String deploymentSite, String siteSlotId)
   at Microsoft.Web.Deployment.WebApi.DeploymentController.&lt;DownloadAndDeployPackage&gt;d__b.MoveNext()'</message>
  </entry>
</entries>

正在从blob下载包路径“artifacts/MyApp.zip”的元数据https://ccfstoragee57wqq4suhjoy.blob.core.windows.net'
blob具有标志IsPremiumApp:。IsPremiumApp返回False
正在从blob下载包路径“artifacts/MyApp.zip”https://ccfstoragee57wqq4suhjoy.blob.core.windows.net'
没有填充任何参数。
对包调用SyncTo()。
添加MSDeploy.dirPath(MSDeploy.dirPath)。
添加MSDeploy.dirPath(MSDeploy.dirPath)。
正在添加目录(C:\Users\Pierre\Documents\Projets\MyProject\MyApp)。
正在添加目录(C:\Users\Pierre\Documents\Projets\MyProject\MyApp)。
包部署失败
AppGallery部署失败:“Microsoft.Web.Deployment.DeploymentDetailedUnauthorizedAccessException:无法对指定目录(“C:\Users\Pierre\Documents\Projets\MyProject\MyApp”)执行操作(“创建目录”)。如果服务器管理员没有为您正在使用的用户凭据授权此操作,则可能会发生这种情况。了解更多信息,请访问:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER. --- Microsoft.Web.Deployment.DeploymentException:错误代码为0x80070005。--System.UnauthorizedAccessException:对路径“C:\Users”的访问被拒绝。
位于Microsoft.Web.Deployment.NativeMethods.RaiseIOExceptionFromErrorCode(Win32 errorCode errorCode,字符串maybeFullPath)
位于Microsoft.Web.Deployment.DirectoryEx.CreateDirectory(字符串路径)
位于Microsoft.Web.Deployment.DirPathProviderBase.CreateDirectory(字符串完整路径,DeploymentObject源)
在Microsoft.Web.Deployment.DirPathProviderBase.Add(DeploymentObject源,布尔whatIf)中
---内部异常堆栈跟踪的结束---
---内部异常堆栈跟踪的结束---
位于Microsoft.Web.Deployment.FilePathProviderBase.HandleKnownRetryableExceptions(DeploymentBaseContext baseContext,Int32[]errorsToIgnore,异常e,字符串路径,字符串操作)
在Microsoft.Web.Deployment.DirPathProviderBase.Add(DeploymentObject源,布尔whatIf)中
在Microsoft.Web.Deployment.DeploymentObject.Add(DeploymentObject源,DeploymentSyncContext syncContext)
位于Microsoft.Web.Deployment.DeploymentSyncContext.HandleAdd(DeploymentObject destObject,DeploymentObject sourceObject)
位于Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject,DeploymentObject sourceObject)
位于Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest,DeploymentObject源)
位于Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(DeploymentObject dest,DeploymentObject源)
位于Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject,DeploymentObject sourceObject)
位于Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject,DeploymentSyncOptions syncOptions,PayloadTable PayloadTable,ContentRootTable ContentRootTable,可空的`1 syncPassId,字符串syncSessionId)
位于Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions、DeploymentBaseOptions baseOptions、DeploymentSyncOptions syncOptions)
位于Microsoft.Web.Deployment.DeploymentObject.SyncTo(字符串提供程序、字符串路径、DeploymentBaseOptions baseOptions、DeploymentSyncOptions syncOptions)
位于Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentWellKnownProvider提供程序、字符串路径、DeploymentBaseOptions baseOptions、DeploymentSyncOptions syncOptions)
位于Microsoft.Web.Deployment.WebApi.AppGalleryPackage.Deploy(String deploymentSite,String siteSlotId)
在Microsoft.Web.Deployment.WebApi.DeploymentController.DownloadAndDeployPackaged__b.MoveNext()中
azure资源组似乎正在尝试在azure web应用程序上重新创建我的本地文件夹层次结构


另一方面,使用用Visual Studio-->发布-->包创建的包可以正常工作。从VS手动创建包不是一个选项,我不明白为什么使用msdeploy.exe时会失败

尝试使用contentpath而不是dirpath,例如

"msdeploy.exe" -verb:sync -source:contentpath="C:\Users\Pierre\Documents\Projets\MyProject\MyApp" -dest:package=C:\Users\Pierre\Documents\MyProject\AzureResourceGroup\MyApp.zip

尝试使用contentpath而不是dirpath,例如

"msdeploy.exe" -verb:sync -source:contentpath="C:\Users\Pierre\Documents\Projets\MyProject\MyApp" -dest:package=C:\Users\Pierre\Documents\MyProject\AzureResourceGroup\MyApp.zip
同样的问题。 经过几天的努力,我们已经查明了archive.xml中序列化和编码的MSDeploy.MSDeployProviderOptions属性值中存在的问题。该值包含打包文件的原始文件夹结构,Azure中的Web Deploy会尝试在目标系统上重新创建相同的结构。 在创建包时运行带有“-replace”选项的msdeploy对这些序列化选项没有任何影响(可能是msdeploy中的错误?)

更新

以下是最终对我有效的方法:

msdeploy.exe
   -source:iisApp='C:\Users\alex\AppData\Local\Temp\PublishTemp\TheWorldVS47\wwwroot'
   -dest:package='C:\Code\TheWorldVS\PublishOutput\package.zip' 
   -verb:sync 
   -enableLink:contentLibExtension 
   -replace:match='C:\\Users\\alex\\AppData\\Local\\Temp\\PublishTemp\\TheWorldVS47\\',replace='website\' 
   -retryAttempts:2 
   -disablerule:BackupRule 
   -declareParam:name="IIS Web Application Name",kind="ProviderPath",scope="IisApp",match="^C:\\Users\\alex\\AppData\\Local\\Temp\\PublishTemp\\TheWorldVS47",defaultValue="website"
这最后一个设置是通过指示Azure中的MSDeploy在默认情况下必须将该长本地路径的任何事件替换为“网站”来实现的。 我想您还可以通过在MSDeploy扩展块的setParameters属性中的ARM json模板中为该值提供覆盖来进一步自定义该值。

这里也有同样的问题。 经过几天的努力,我们已经查明了archive.xml中序列化和编码的MSDeploy.MSDeployProviderOptions属性值中存在的问题。该值包含打包文件的原始文件夹结构,Azure中的Web Deploy会尝试在目标系统上重新创建相同的结构。 创建包时使用“-replace”选项运行msdeploy