我为EC2安装了一个新的AMI(http://aws.amazon.com/amis/Microsoft/5147732567196848),并在其上安装了Web部署2.1.
Web部署2.1服务正在运行
netstat -an
Run Code Online (Sandbox Code Playgroud)
Web Deployment Agent Service正在监听8172.
但是,当我尝试使用Project->右键单击 - >发布(通过Web部署)部署到此站点时,我收到以下错误消息
------ Build started: Project: Cir.Web, Configuration: Debug Any CPU ------
Cir.Web -> C:\Projects\CrazyInsaneRobot\Source\Cir.Web\bin\Cir.Web.dll
------ Publish started: Project: Cir.Web, Configuration: Debug Any CPU ------
Transformed Web.config using Web.Debug.config into obj\Debug\TransformWebConfig\transformed\Web.config.
Auto ConnectionString Transformed Views\Web.config into obj\Debug\CSAutoParameterize\transformed\Views\Web.config.
Auto ConnectionString Transformed obj\Debug\TransformWebConfig\transformed\Web.config into obj\Debug\CSAutoParameterize\transformed\Web.config.
Copying all files to temporary location below for package/publish:
obj\Debug\Package\PackageTmp.
Start Web Deploy Publish the Application/package to https://ec2-175-41-170-198.ap-southeast-1.compute.amazonaws.com:8172/msdeploy.axd?site=Default%20Web%20Site ...
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5): Warning : Retrying the …Run Code Online (Sandbox Code Playgroud) 我正在尝试在MS Deploy包中创建一个可写入应用程序池用户的子目录.感谢Kevin Leetham 关于setAcl提供程序的有用帖子,我能够将我需要的大部分内容放到我的项目文件中:
<MsDeploySourceManifest Include="setAcl"
Condition="$(IncludeSetAclProviderOnDestination)">
<Path>$(_MSDeployDirPath_FullPath)\doc\public</Path>
<setAclAccess>Read,Write,Modify</setAclAccess>
<setAclResourceType>Directory</setAclResourceType>
<AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
</MsDeploySourceManifest>
Run Code Online (Sandbox Code Playgroud)
请注意,我已将"\ doc\public"添加到根部署目录.在VS2010构建的结果清单中,我看到以下setAcl元素:
<sitemanifest>
<contentPath path="C:\Source\...\obj\Debug\Package\PackageTmp" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp"
setAclResourceType="Directory" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp"
setAclUser="anonymousAuthenticationUser"
setAclResourceType="Directory" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp\doc\public"
setAclResourceType="Directory"
setAclAccess="Read,Write,Modify" />
</sitemanifest>
Run Code Online (Sandbox Code Playgroud)
最后一行看起来很好:它附加了我想要写的子目录,并且访问修饰符似乎已经转移得足够好了.
但是,当我部署此包时,我收到一个错误:
错误:当'setAcl'提供程序与物理路径一起使用时,必须指定'setAclUser'设置的值.
这是一个令人困惑的错误,因为我并没有尝试在物理路径上设置ACL,而是在Web应用程序的子目录中.查看MS Deploy的输出,很容易看出问题所在:
Info: Adding setAcl (REST Services\1.0.334).
Info: Adding setAcl (REST Services\1.0.334).
Info: Adding setAcl (C:\...\obj\Release\Package\PackageTmp\doc\public).
Run Code Online (Sandbox Code Playgroud)
MS Deploy显然用我的绝对路径"C:...\obj\Release\Package\PackageTmp"替换了Web应用程序名称,但当我将"\ doc\public"附加到该绝对路径时,它不再将其识别为Web应用程序目录.这个确切的问题是由另一个受害者在ASP.NET论坛上描述而没有任何解决方案.
有没有人知道如何通过Web Deploy在Web应用程序的特定子目录上设置ACL,而无需在目标主机上手动识别物理路径和应用程序池用户?
我正在尝试让MSDeploy在远程服务器上执行PowerShell脚本.这是我执行MSDeploy的方式:
msdeploy \
-verb:sync \
-source:runCommand='C:\temp\HelloWorld.bat', \
waitInterval=15000,waitAttempts=1 \
-dest:auto,computername=$WebDeployService$Credentials -verbose
Run Code Online (Sandbox Code Playgroud)
HelloWorld.bat包含:
echo "Hello world!"
powershell.exe C:\temp\WebDeploy\Package\HelloWorld.ps1
echo "Done"
Run Code Online (Sandbox Code Playgroud)
HelloWorld.ps1仅包含:
Write-Host "Hello world from PowerShell!"
Run Code Online (Sandbox Code Playgroud)
但是,似乎PowerShell永远不会终止.这是运行msdeploy的输出:
Verbose: Performing synchronization pass #1.
Verbose: Source runCommand (C:\temp\HelloWorld.bat) does not match destination (C:\temp\HelloWorld.bat) differing in attributes (isSource['True','False']). Update pending.
Info: Updating runCommand (C:\temp\HelloWorld.bat).
Info:
Info: C:\temp>echo "Hello world!"
"Hello world!"
C:\temp\WebDeploy>powershell.exe C:\temp\HelloWorld.ps1
Info: Hello world from Powershell!
Info:
Warning: The process 'C:\Windows\system32\cmd.exe' (command line '/c "C:\Users\peter\AppData\Local\Temp\gaskgh55.b2q.bat
"') is still running. Waiting for 15000 …Run Code Online (Sandbox Code Playgroud) 我想知道如何执行以下操作
从我自己的阅读中我不确定如何做到这一点.WebDeploy似乎基于配置打包,转换和部署,但我不确定如何解耦这些步骤以避免需要从源代码控制重新编译代码.
有没有人有解决这个问题的经验?
我的团队使用Web Deploy将我们网站的更新部署到我们的生产服务器上.最近几天我一直在做家务管理并更改了我的密码(我确保在我的Web Deploy配置中更新)并将我们网站的解决方案移到了TFS的其他位置.我不确定哪些(如果有)导致了这个问题,但我现在无法再使用Web Deploy发布我们的网站了.
我可以预览发布正常,但我实际上无法发布它.

Visual Studio中的输出显示:
Start Web Deploy Publish the Application/package to https://[REDACTED]:8172/msdeploy.axd?site=[REDACTED] ...
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets(4270,5): Error ERROR_COULD_NOT_CONNECT_TO_REMOTESVC: Web deployment task failed. (Could not connect to the remote computer ("[REDACTED]") using the specified process ("Web Management Service") because the server did not respond. Make sure that the process ("Web Management Service") is started on the remote computer. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_COULD_NOT_CONNECT_TO_REMOTESVC.)
Publish failed to deploy.
Run Code Online (Sandbox Code Playgroud)
(请注意,我已从此日志中删除了一些识别信息,该信息已替换为'[删除]')
我在这里找到了一个描述此问题的页面:http://www.iis.net/learn/publish/troubleshooting-web-deploy/troubleshooting-web-deploy-problems-with-visual-studio
它说要检查WMSvc日志以查找状态和子状态代码以进行进一步的故障排除.

在这里,我将与绿色预览相关的彩色线条和与红色实际发布相关的线条进行了颜色编码.如您所见,请求以200(OK)状态返回,这意味着服务器不会发现任何错误.但是,Visual Studio报告失败,我的生产网站尚未更新.
生成日志条目的事实告诉我Web Deploy已正确安装并且处理程序已正确设置.
似乎部署总是在~30秒后失败.这可能是巧合,但我想知道是否有超时发挥.
有人建议进一步的故障排除步骤 …
我们有一个解决方案,其中包含一个webapp项目和一些附带的项目.我们的TFS 2010每晚都在构建此解决方案,并将Web应用程序部署到IIS服务器.它像微风一样奔跑.
在TFS构建定义的Process选项卡中,您可以指定"MSBuild Arguments".这是我们的构建定义中设置的值(全部在一行中):
/p:DeployOnBuild=True
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=True
/p:MSDeployPublishMethod=WMSVC
/p:MSDeployServiceUrl=<service url of IIS>
/p:DeployIisAppPath="<a website>"
/p:UserName=<domain>\<user
/p:Password=<password>
Run Code Online (Sandbox Code Playgroud)
这篇博客文章解释了整个设置:http: //vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html.
到现在为止还挺好.
现在我们已经添加了第二个webapp项目,我们希望每晚都将它部署到同一个IIS中.不幸的是,在这种情况下,设置不适用.TFS只部署一个webapp.
还有其他人有同样的问题:
当解决方案具有多个Web应用程序时,TFS 2010 + MSDeploy
和
Vishal R. Joshi建议为每个webapp项目添加一些属性.现在,发布版本将为每个webapp项目生成webpackage(zip文件),该项目具有以下定义的属性:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DeployOnBuild>True</DeployOnBuild>
<DeployTarget>Package</DeployTarget>
<CreatePackageOnPublish>true</CreatePackageOnPublish>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
好.但是如何让TFS将每个webapp部署到IIS呢?还有其他想法吗?
我使用visual studio发布选项向我的主机发布了我的网站.
我的主机使用asp.net 4.5.1框架.
它在本地工作正常,但在我发布后,它给出了这个错误.
我的本地visual studio解决方案文件夹包含一个名为packages的文件夹,它包含一些与错误相关的文件?
这是我的配置文件(为清楚起见省略了其他行):
谢谢.
我试图通过MSDeploy运行命令作为我的打包/部署过程的一部分.特别是,我试图通过对我的一个DLL 运行installutil来创建自定义事件日志,但是我在部署目录中指定DLL 的相对路径时遇到问题.首先,我将以下配置添加到我的csproj中,以便在我的Manifest文件中生成runCommand提供程序.请注意DLL的绝对路径.
<PropertyGroup>
<!-- Extends the AfterAddIisSettingAndFileContentsToSourceManifest action to create Custom Event Log -->
<IncludeEventLogCreation>TRUE</IncludeEventLogCreation>
<AfterAddIisSettingAndFileContentsToSourceManifest Condition="'$(AfterAddIisSettingAndFileContentsToSourceManifest)'==''">
$(AfterAddIisSettingAndFileContentsToSourceManifest);
CreateEventLog;
</AfterAddIisSettingAndFileContentsToSourceManifest>
</PropertyGroup>
<Target Name="CreateEventLog" Condition="'$(IncludeEventLogCreation)'=='TRUE'">
<Message Text="Creating Event Log" />
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<path>installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll</path>
</MsDeploySourceManifest>
</ItemGroup>
</Target>
<ItemGroup>
Run Code Online (Sandbox Code Playgroud)
在调用msbuild之后,这在package.zip中正确生成了我的清单.当我运行MyTestApp.deploy.cmd/Y时,它正确调用了msdeploy并将我的文件部署到inetpub\wwwroot\MyTestApp并从下面的清单中运行我的命令:
<runCommand path="installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll ... etc
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我不想将此DLL路径硬编码到c:\ inetpub\etc.如何使用默认网站下部署目录中的相对路径进行上述调用?理想情况下,我希望MSDeploy采用此路径并将其作为变量传递给runCommand语句,以便找到DLL.然后我可以编写类似的内容:<path>installutil $DeploymentDir\NewTestApp\bin\BusinessLayer.dll</path>无需担心硬编码绝对路径.
有没有办法这样做,而不是每次都使用我的DLL的绝对路径?
我正在将MSDeploy集成到我的构建过程中,并且在验证时遇到问题.以下命令工作正常:
msdeploy -verb:sync -source:appHostConfig="KitchenPC",computerName=192.168.0.3,userName=Administrator,password=secret -dest:package=c:\DeployTest\KPC.zip
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用:
msdeploy -verb:sync -source:appHostConfig="KitchenPC",computerName=192.168.0.3,userName=kpcpublish,password=secret -dest:package=c:\DeployTest\KPC.zip
Run Code Online (Sandbox Code Playgroud)
并产生错误:
Error Code: ERROR_USER_NOT_ADMIN
More Information: Connected to '192.168.0.11' using the Web Deployment Agent Service, but could not authorize. Make sure you are an administ
rator on '192.168.0.11'. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_NOT_ADMIN.
Error: The remote server returned an error: (401) Unauthorized.
Error count: 1.
Run Code Online (Sandbox Code Playgroud)
我按照上面链接中的说明和我能找到的任何其他文档,几乎都说同样的事情:
.
Run Code Online (Sandbox Code Playgroud)Publish enabled for 'SERVER\kpcpublish' Granted 'SERVER\kpcpublish' …
我使用以下脚本将我的ASP.NET MVC应用程序部署到我们的Web服务器:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MySolution.sln^
/p:Configuration=TeamCity-Test^
/p:OutputPath=bin^
/p:DeployOnBuild=True^
/p:DeployTarget=MSDeployPublish^
/p:MsDeployServiceUrl=https://mywebserver.com:8172/msdeploy.axd^
/p:username=MyDomain\MyUser^
/p:password=MyPassword^
/p:AllowUntrustedCertificate=True^
/p:DeployIisAppPath=mywebsitename.com^
/p:MSDeployPublishMethod=WMSVC
Run Code Online (Sandbox Code Playgroud)
现在我需要指定不同步/ uploads文件夹.我可以在这个脚本中指定吗?谢谢!
澄清:我的项目中有Uploads文件夹.我想让Web Deploy创建该文件夹.我不希望它从我的Web服务器中删除文件夹/子文件夹/文件,因为它包含用户上传的内容.
澄清#2:我刚刚找到了SkipExtraFilesOnServer=True选项.但是,我不希望这是全球性的.我想将它设置为一个文件夹.
webdeploy ×10
asp.net ×5
msdeploy ×5
iis ×4
msbuild ×4
deployment ×2
amazon-ec2 ×1
c# ×1
iis-7 ×1
iis-7.5 ×1
powershell ×1
tfs ×1
tfs2010 ×1