knu*_*nut 19 msdeploy webdeploy
我像这样制作msdeploy包:
msdeploy.exe -verb:sync -source:iisApp=c:\content\ -dest:package=c:\pkg.zip
Run Code Online (Sandbox Code Playgroud)
在C:\内容目录中有一个单一的index.html文件.
输出如下所示:
Info: Adding package (package).
Info: Adding child iisApp (c:\content\).
Info: Adding child createApp (c:\content\).
Info: Adding child contentPath (c:\content\).
Info: Adding child dirPath (c:\content\).
Info: Adding child filePath (c:\content\index.html).
Total changes: 6 (6 added, 0 deleted, 0 updated, 0 parameters changed, 0 bytes copied)
Run Code Online (Sandbox Code Playgroud)
如果我将c:\ pkg.zip的内容解压缩到目录c:\ pkg中,它看起来像这样:
archive.xml
systemInfo.xml
Content\c_C
Content\c_C\content
Content\c_C\content\index.html
Run Code Online (Sandbox Code Playgroud)
如果我像这样转储包:
msdeploy.exe -verb:dump -source:package=c:\pkg.zip -xml
Run Code Online (Sandbox Code Playgroud)
我明白了:
<output>
<MSDeploy.iisApp>
<iisApp path="c:\content\">
<createApp
path="c:\content\"
isDest="False"
managedRuntimeVersion=""
enable32BitAppOnWin64=""
managedPipelineMode=""
applicationPool=""
appExists="True" />
<contentPath path="c:\content\">
<dirPath
path="c:\content\"
securityDescriptor="D:"
parentSecurityDescriptors=""
attributes="Directory">
<filePath
path="index.html"
size="0"
attributes="Archive"
lastWriteTime="07/07/2011 20:58:00"
securityDescriptor="D:" />
</dirPath>
</contentPath>
</iisApp>
</MSDeploy.iisApp>
</output>
Run Code Online (Sandbox Code Playgroud)
我不希望包依赖于站点文件的当前位置.我打算把包发给客户,我不希望任何有关包装过程的细节随包装一起发货.我希望包c:\ pkg.zip的内容如下所示:
archive.xml
systemInfo.xml
Content\index.html
Run Code Online (Sandbox Code Playgroud)
我希望包能够创建一个IIS应用程序,所以我需要一个虚拟路径.我还想将软件包安装到默认位置.所以物理路径也必须改变.我希望转储看起来像这样:
<output>
<MSDeploy.iisApp>
<iisApp path="Default Web Site\Site">
<createApp
path="Default Web Site\Site"
isDest="False"
managedRuntimeVersion=""
enable32BitAppOnWin64=""
managedPipelineMode=""
applicationPool=""
appExists="False" />
<contentPath path="c:\inetpub\wwwroot\site">
<dirPath
path="c:\inetpub\wwwroot\site"
securityDescriptor="D:"
parentSecurityDescriptors=""
attributes="Directory">
<filePath
path="index.html"
size="0"
attributes="Archive"
lastWriteTime="07/07/2011 20:58:00"
securityDescriptor="D:" />
</dirPath>
</contentPath>
</iisApp>
</MSDeploy.iisApp>
</output>
Run Code Online (Sandbox Code Playgroud)
我已将iisApp和createApp提供程序路径属性更改为Default Web Site\Site.我将contentPath和dirPath提供程序路径属性更改为c:\inetpub\wwwroot\site.
pet*_*ven 17
您需要查看MS Deploy替换规则,这是MS Deploy团队博客中隐藏的有用功能.
在您的情况下,您将需要使用一堆替换表达式扩展您的命令行,如下所示:
msdeploy.exe
-verb:sync
-source:iisApp=c:\content\
-dest:package=c:\pkg.zip
-replace:objectName=iisApp,targetAttributeName=path,
replace="Default Website\Site"
-replace:objectName=createApp,targetAttributeName=path,
replace="Default Website\Site"
-replace:objectName=contentPath,targetAttributeName=path,
replace="c:\inetpub\wwwroot\site"
-replace:objectName=dirPath,targetAttributeName=path,match="^c:\content",
replace="c:\inetpub\wwwroot\site"
Run Code Online (Sandbox Code Playgroud)
运行它应该产生您想要的输出.
在上面的示例中,前3个替换规则通过标记名称(objectName)和属性名称(targetAttributeName)匹配,并使用指定的替换字符串覆盖.最后一个替换规则将匹配dirPath以"c:\ content"开头的所有标记的所有路径属性,并且将仅使用替换字符串替换属性值的该部分.
最后,我还没有找到一种方法来避免包zip文件包含原始源文件夹名称.唯一的解决方法是从中性的临时位置打包,例如"c:\ site".
所以程序是:
我或多或少有同样的问题.
首先要做的事情:
为此,我使用了http://sedodream.com/2013/01/13/WebPackagingFixingTheLongPathIssue.aspx上的技巧.
正如帖子中所建议的,可以在项目的Properties/PublishProfiles文件夹下修改所需的(可以有几个).pubxml文件.这是我遵循的方法,因为它允许我自定义每个发布配置文件的行为.
如果我没有弄错的话,我相信你可以对项目根目录下的{project-name} .wpp.targets文件(可能还不存在)应用相同的修改.但是,这里的更改会影响Web发布管道(wpp),从而影响项目中的所有发布配置文件.
当您的连接字符串替换为发布配置文件提供的连接字符串时,此方法即将破坏您的部署.原因是:上述技巧不会影响连接字符串,因为它们是在构建时由wpp自动创建的.寮步,呵呵!
我发现这个问题的解决方案是双重的:
1.)创建了一个parameters.xml文件,我手动声明了连接字符串.好吧,也许我从我的软件包的.zip文件中的parameters.xml文件中复制它们,因为我正在部署到一个软件包.这有帮助.
他们看起来像这样:
<parameter name="myConnection-Web.config Connection String" defaultValue="" tags="SqlConnectionString"
description="myConnection Connection String used in web.config by the application to access the database.">
<parameterEntry kind="XmlFile" scope="DeploymentPackage\\Web\.config$" match="/configuration/connectionStrings/add[@name='myConnection']/@connectionString" />
</parameter>
Run Code Online (Sandbox Code Playgroud)
2.)包含在我们之前修改的同一.pubxml文件顶部的以下行
<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
Run Code Online (Sandbox Code Playgroud)
而且...... Voilà!
希望您使用上述方法声明了几个参数,包括连接字符串.
但是,在创建包时,无论您是否创建了parameters.xml,都会为您创建一个*.SetParameters.xml 模板文件.在其中,您将看到"IIS Web应用程序名称"的第一个参数,它将默认为您在发布配置文件中插入的任何内容.你可以改变它; 无论你想要什么.
还记得以前我说的模板吗?我的意思是; 它只是一个模板.您可以根据需要获取*.SetParameters.xml文件并制作尽可能多的副本.它们适用于什么?环境相关参数.你可以有一个:
然后使用最适合作业(或环境)的参数文件,如下所示:
{yourProjectName}.deploy.cmd /Y /M:{targetServer} [...] -setParamFile:QA.SetParameters.xml
Run Code Online (Sandbox Code Playgroud)
或者等效的MsDeploy命令行当然.
现在,默认情况下,在构建时为您创建的清单以及存储在archive.xml文件下的软件包中的清单将首先使用iisApp提供程序.这很好,因为与createApp提供程序不同,此提供程序实际上会为您创建目录(如果它不存在).至少根据TechNet的这篇说明:
"与iisApp提供程序不同,如果新应用程序的物理文件夹不存在,则createApp提供程序不会在父站点的文件夹下创建物理文件夹;它只会在配置中为此类文件夹创建引用.如果您需要创建物理文件夹后,您必须在使用createApp之前或之后手动创建它.因此,您通常应该使用iisApp提供程序.iisApp提供程序是更合适的选择,因为它使用createApp提供程序作为初始步骤一系列步骤,包括在配置中创建应用程序,如果文件夹不存在,为应用程序创建物理文件夹,以及将内容文件复制到新应用程序的文件夹中.
我很乐意加入这些链接...但由于我没有10分以上,我每个帖子只允许一个.去搞清楚!:)
...通过第一部分完成的工作,您可能不需要做太多工作就可以在目标服务器中部署时创建文件夹.
如果您确实需要覆盖它,您可以定义自己的清单文件并从中进行部署(单独的主题)...或者您可以使用@peter_raven建议并使用-ReplaceMsDeploy中的规则覆盖其值.
任何一个都可以作为魅力.
| 归档时间: |
|
| 查看次数: |
9687 次 |
| 最近记录: |