我正在尝试在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,而无需在目标主机上手动识别物理路径和应用程序池用户?
我正在使用Web Deploy打包和部署我的产品的网站.特别是,我在我的解决方案中有两个不同的项目,我使用此方法进行部署.
我在解决方案(Windows服务)中有第三个项目,也需要在Web服务器上安装.
我知道我可以编写自定义清单(对dirPath
,filePath
和runCommand
供应商),并直接调用MsDeploy部署它.但是,如果可能的话,我想利用现有的MsBuild任务打包我的服务.
我看到可以通过msbuild目标对清单文件进行一些自定义:
http://social.msdn.microsoft.com/Forums/en/msbuild/thread/1044058c-f762-456b-8a68-b0863027ce47
特别是通过使用该MsDeploySourceManifest
项目.
通过适当的.targets文件戳后,它看起来像要么contentPath
或者iisApp
如果我使用将得到追加到我的清单Package
的目标.理想情况下,我只想复制程序集(或目录),可能设置ACL,并在服务上执行installutil.exe.
是否可以Package
通过编辑我的csproj文件来完全自定义目标生成的清单?
如果没有,是否有一种简单的方法可以构建一个新的目标来实现相同的目标Package
,但是允许我吐出一个完全自定义的清单?
我想知道如何从PowerShell以与Visual Studio相同的方式发布.
例如,当您使用MVC项目启动Visual Studio时; 然后右键单击项目并选择"发布"; 出现一个对话框,您可以在再次单击"发布"中填写一些设置.它按预期神奇地推动您的网站.它还会创建一个文件来保存这些设置.projectName.Publish.xml.
该文件是我希望能够以完全相同的方式使用它的原因.有一些设置可以在powershell中进行操作,将应用程序推送到具有不同配置的多个站点.
我查看了"msbuild target:publish",它只生成(从包含.csproj的目录运行):
MSBUILD : error MSB1009: Project file does not exist.
Switch: target:publish
Run Code Online (Sandbox Code Playgroud)
我试过"msbuild projectfile target:publish",它产生:
MSBUILD : error MSB1008: Only one project can be specified.
Switch: target:build
Run Code Online (Sandbox Code Playgroud)
我还看了几个msdeploy变种.这不可能这么难!?如果您可以在工作室中右键单击,则可以执行该任务.
我开始怀疑这是否需要满月并将鸡头切掉.(我花了很多时间在这上面!)
**编辑:我试过李的建议:
msbuild target:publish Mvc.csproj
Run Code Online (Sandbox Code Playgroud)
哪会产生这个错误:
MSBUILD : error MSB1008: Only one project can be specified.
Switch: Mvc.csproj
For switch syntax, type "MSBuild /help"
Run Code Online (Sandbox Code Playgroud)
**编辑:根据DaveE的建议,我试过:
msbuild target:publish Mvc.csproj
Run Code Online (Sandbox Code Playgroud)
哪会产生这个错误:
MSBUILD : error MSB1009: Project file does not exist.
Switch: target:publish=PassportHealth.PatientSimple.Mvc.csproj
Run Code Online (Sandbox Code Playgroud)
我还回到了"发布"目标(http://msdn.microsoft.com/en-us/library/ms165431.aspx)的文档,这似乎很清楚,语法是:
msbuild …
Run Code Online (Sandbox Code Playgroud) msbuild powershell visual-studio-2010 msdeploy visual-studio
我目前正在运行Visual Studio Team System 2010 RC,我正在尝试使用Build Service设置来构建我的解决方案并在其中部署3个Web应用程序.我已经创建了一个名为Integration的自定义构建配置,并且我在每个Web应用程序的"属性"的"包/发布"选项卡上设置了"在目标服务器上使用的IIS网站/应用程序名称".
在我的构建定义中,我设置了以下参数:
/ p:DeployOnBuild = True/p:DeployTarget = MSDeployPublish/p:MSDeployPublishMethod = InProc/p:MsDeployServiceUrl = http:// my-server-name:8172/msdeploy.axd/p:EnablePackageProcessLoggingAndAssert = True
但是,当我运行构建时,我得到以下错误,对于所有三个Web应用程序:
更新setAcl(MyProjectName).
C:\ Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3481,5):错误:Web部署任务失败.(试图执行未经授权的操作.)
我不认为这是我的实际问题.在日志中的以下条目之后发生此错误:更新setAcl这是导致错误消息的原因,但似乎MSDeploy正在尝试部署到构建服务器上的本地IIS,而不是我使用MsDeployServiceUrl参数指定的服务器.
在C:\ Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets中查看目标文件后,我添加了EnablePackageProcessLoggingAndAssert,它添加了额外的日志记录.该日志显示MsDeployServiceUrl值的emptry字符串.我还注意到在目标中MsDeployServiceUrl有一个小写的s,这有点令人困惑,因为任务名称MSDeployPublish有一个大写的S.我尝试使用大写,然后再次使用小写,但都没有工作.
还有几点需要注意:
有谁知道我是否提供正确的参数?还是给我提供正确的?
谢谢
我正在编写一些使用MSDeploy API的PowerShell脚本.我可以使用加载程序集
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Deployment")
Run Code Online (Sandbox Code Playgroud)
该地点位于GAC:
PS > [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Deployment") | fl Location
Location : C:\Windows\assembly\GAC_MSIL\Microsoft.Web.Deployment\7.1.0.0__31bf3856ad364e35\Microsoft.Web.Deployment.dll
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用Add-Type加载程序集.我收到一个错误,说无法找到程序集,并且缺少一个或多个程序集.
PS > Add-Type -AssemblyName Microsoft.Web.Deployment
Add-Type : Cannot add type. The assembly 'Microsoft.Web.Deployment' could not be found.
At line:1 char:9
+ Add-Type <<<< -AssemblyName Microsoft.Web.Deployment
+ CategoryInfo : ObjectNotFound: (Microsoft.Web.Deployment:String) [Add-Type], Exception
+ FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands.AddTypeCommand
Add-Type : Cannot add type. One or more required assemblies are missing.
At line:1 char:9
+ Add-Type <<<< -AssemblyName Microsoft.Web.Deployment
+ CategoryInfo : InvalidData: (:) …
Run Code Online (Sandbox Code Playgroud) 我使用MSDeploy在CI期间将内容发布到不同的服务器.当我从Visual Studio 2010发布时,我有一个"在目标上保留额外文件"选项,但是当从命令行调用MSDeploy时,我似乎无法找到此功能的标志.
有谁知道如何做到这一点??
我正在尝试让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秒后失败.这可能是巧合,但我想知道是否有超时发挥.
有人建议进一步的故障排除步骤 …
作为构建过程的一部分,我们使用MSDeploy部署Web应用程序.这种方法在几个星期前就完美了(我想我们将构建/ TFS服务器更新到TFS 2010的SP1时).
在我们的构建定义中,有一个调用进程的步骤.此过程将调用生成的deploy.cmd文件并传入一些其他参数.这很好用了很长时间,但现在我们得到了这个:
错误:无法识别的参数'"-skip:objectName = filePath,absolutePath =.*cmsservices.config"'.所有参数必须以" - "开头.
如帮助中所述,我们使用引号传递其他参数:
WebApplication.deploy.cmd/Y/M:sv-ad-iis02 -allowUntrusted"-skip:objectName = filePath,absolutePath =.*cmsservices.config"" - skip:objectName = filePath,absolutePath =.*servicemodel.client.config ""-skip:objectName = dirPath,absolutePath = app_data"
但是,这个技巧不再适用.删除引号也将删除任何字符,如=和,将替换为空格.
我将其追溯(通过将旧的deploy.cmd与新版本进行比较)到此行:
第76行:
@rem Any addition flags, pass through to the msdeploy
set _ArgMsDeployAdditionalFlags=%_ArgMsDeployAdditionalFlags% %_ArgCurrentOriginal%
Run Code Online (Sandbox Code Playgroud)
在之前的版本中,这是:
@rem Any addition flags, pass through to the msdeploy
set _ArgMsDeployAdditionalFlags=%_ArgMsDeployAdditionalFlags% %_ArgCurrent%
Run Code Online (Sandbox Code Playgroud)
_ArgCurrentOriginal使用%1而不是%~1,如果我更改此代码,它将再次起作用.但是每次都会自动生成deploy.cmd文件(至少它看起来像)
任何线索为什么这已经改变以及如何处理这个?
更新; 我通过使用环境变量来传递这些值来解决这个问题.它仍然无法解决新的deploy.cmd文件以不同方式转义引号的问题.
我现在放在部署流程工作流程中的解决方案:
<mtbwa:InvokeProcess Arguments="[String.Format("/Y /M:{0} -allowUntrusted", DeploymentServerName)]" DisplayName="Deploy selected Web Application using MSDeploy" EnvironmentVariables="[New Dictionary(Of String, String) From {{"_MsDeployAdditionalFlags", …
Run Code Online (Sandbox Code Playgroud) msdeploy ×10
msbuild ×4
webdeploy ×4
powershell ×3
asp.net ×2
c# ×1
deployment ×1
iis ×1
iis-7 ×1
manifest ×1
slowcheetah ×1
tfs ×1
tfs2010 ×1
tfsbuild ×1