看起来Web部署只是一种调用msdeploy的不同方式?我已阅读一些文档但仍然了解两者之间的区别.
它仍然被称为"Web部署工具",但我不明白它与msdeploy.exe的区别
我正在使用 VSTS 在多个环境中进行部署。和往常一样,配置文件上的一些参数需要根据环境而不同,因此我将使用配置转换将其部署到目标环境中。
由于我想要包含稍后应用的配置和转换的包,因此我将构建操作设置为内容:
<Content Include="App_Config\MyConfig.config" />
<Compile Include="App_Config\MyConfig.prod.config">
<DependentUpon>MyConfig.config</DependentUpon>
</Compile>
<Compile Include="App_Config\MyConfig.uat.config">
<DependentUpon>MyConfig.config</DependentUpon>
</Compile>
<Compile Include="App_Config\MyConfig.dev.config">
<DependentUpon>MyConfig.config</DependentUpon>
</Compile>
Run Code Online (Sandbox Code Playgroud)
包正确完成,部署也是如此(MyConfig.config 已根据其运行的环境更改参数)。我的问题是在服务器机器上我也有 MyConfig.*.config 文件。
查看官方文档示例说明(https://docs.microsoft.com/en-us/vsts/pipelines/tasks/transforms-variable-substitution?view=vsts#xml-transformation-example)没有给出任何明确的信息. 这只是“msbuild 会在打包之前完成,而 azure 不会”,但并没有解释如何做到这一点。
编辑:我使用的解决方案。
基本上我无法避免保持工件清洁,因为它们不依赖于环境。因此,在所有发布管道之后,我添加了一个删除文件作业(https://docs.microsoft.com/en-us/vsts/pipelines/tasks/utility/delete-files?view=vsts)以使用以下内容删除所有配置文件参数:
源文件夹:
$(wwwRoot)\
内容:
**\*.Debug.config
**\*.Release.config
**\*.UAT.config
**\*.PROD.config
web-config msdeploy visual-studio web-config-transform azure-devops
Azure DevOps Build 工件放置包含以下文件:
这些文件是单个解决方案的构建输出的结果。
我想将 Project1 Web 应用程序部署到 Azure。
我设置了一个发布定义并向其添加了一个部署 Azure Web 服务任务。任务包文件或文件夹的路径包含与一个文件 Project1.zip 完全匹配的值。我没有在任何地方指定任何 *.deploy.cmd 文件。
当发布执行时,它在该任务上失败并出现错误: 多个包与指定模式匹配:*.deploy.cmd。请限制搜索模式。
我发现的唯一解决方法是删除 2.deploy.cmd 以便部署 dask 不会使用指定的搜索模式找到多个文件。但我不想删除它,特别是因为我也想最终部署 Project2。如何解决这个问题呢?
从 Visual Studio 2022 发布配置文件将启用了C# 10 的 ASP.NET Core 6 Web 应用程序发布<ImplicitUsings />到 Azure 应用服务时,发布构建由于缺少using语句而失败。
C# 10 引入了新的隐式 using功能,其中某些using指令被视为基于 SDK 的全局 using指令。可以通过以下配置启用此功能csproj:
<PropertyGroup>\n <ImplicitUsings>enable</ImplicitUsings>\n</PropertyGroup>\nRun Code Online (Sandbox Code Playgroud)\n这与本地构建的预期完全一致。例如,当针对Microsoft.NET.Sdk.WebSDK 时,我可以删除、、、 &cusing的指令。SystemSystem.Collections.GenericSystem.Linq
但是,当从 Visual Studio 2022 发布配置文件发布到 Azure 应用服务时,生成输出会显示如下错误:
\nC:\\Code\\MyWebApp\\MyClass.cs(41,25): Error CS0246: The type or namespace name \'IEnumerable<>\' could not be found (are you missing a …Run Code Online (Sandbox Code Playgroud) 经过一周的挣扎,我刚刚在IIS7上获得了msdeploy处理程序(诅咒其后备文档).所以知道我有一个简单的同步"工作",但我想在清单中移动尽可能多的-sync参数,而不是将其隐藏在我的MSBUILD任务中.这是部署命令行:
msdeploy.exe -verb:sync
-source:package="D:\Projects\Packaged.zip"
-dest:iisApp="beta.mysite.com",
wmsvc=ops.mysite.com,
username=deployUser,
password=secret,
skipAppCreation=true
-allowUntrusted=true
Run Code Online (Sandbox Code Playgroud)
我已经找到了很多包含iisApp路径的清单示例,但它们通常将其他位移动到参数文件中(我猜)用户输入.有这样的简单:
<!-- Pseudo-code manifest -->
<msdeploy.iisApp>
<iisApp path="beta.mysite.com">
<param key="wmsvc" value="ops.mysite.com"/>
<param key="SkipAppCreation" value="true"/>
<param key="username" value="deployUser"/>
<param key="password" value="secret"/>
</iisApp>
</msdeploy.iisApp>
Run Code Online (Sandbox Code Playgroud) 我正在研究使用Visual Studio 2010进行一键式部署,当前的部署过程涉及压缩IIS文件夹的内容并在完成剩余的手动部署步骤之前备份当前数据库.这允许我们回滚部署,如果不具体,我需要保留此过程的本质.
有没有办法使用MSDeploy实现自动化?
我已经收集了一份(希望有用的)总结我已经研究过的方法来完成这篇文章的主题,以及我遇到的问题.请告诉我你是否找到了其他你喜欢的方式,特别是如果他们解决了我提到的方法没有的问题.
在web.config中保留连接字符串,并使用XDT/msdeploy转换根据我的活动构建配置(例如,web.PublicTest.config文件)将其替换为设置.我的问题是我合并并将一些特定于服务器的设置埋入具有许多配置元素的全局相同的文件中.此外,我无法在多个对等级应用程序之间共享连接字符串定义.
为web.config中的连接字符串指定configSource ="DeveloperLocalConnectionStrings.config"值,XDT将此值转换为指向我的代码库中多个特定于环境的文件之一.我的问题是我将所有环境的密码发送到所有目的地(当然还有SVN),并且未使用的配置部分位于等待意外使用的服务器上.
machine.config文件中的特定连接字符串而不是web.config.问题:heck期望在machine.config中找到连接字符串的人,以及因此导致意外名称冲突的可能性很高.
指定configSource ="LocalConnectionStrings.config",不要转换值,并编辑项目xml以排除连接字符串配置的部署.http://msdn.microsoft.com/en-us/library/ee942158.aspx#can_i_exclude_specific_files_or_folders_from_deployment - 这是我发现的最好的解决方案,以满足我对专有(非分布式)Web应用程序的需求,但我很偏执,另一个团队成员有一天会来复制生产网站进行测试,出于某种原因,瞧!现在正在UAT期间修改生产数据库.(更新:我发现在这种情况下我不能使用一键发布,只有msdeploy命令行和-skip参数.如上所述排除文件与将其设置为"无"编译操作相同,而不是"内容",并导致包从部署目标中删除它.)
连接部署包以提示连接字符串(如果尚未设置)(我不知道如何执行此操作但我知道这是可能的).这将与上面的#4类似.
指定configSource ="..\ConnectionStrings.config".对我的需求很有用,因为我可以在我选择的应用程序之间共享配置,并且在我的应用程序目录中没有任何特定于机器的东西.不幸的是,在这个属性中不允许使用父路径(就像它们用于'appSettings file =""' - 请注意,你可以在configSource = reference中使用file = spiffily).
ps这里讨论了一些这样的解决方案:ASP.Net配置文件 - >多个开发人员和部署服务器的连接字符串
我有一个Web应用程序,我试图使用MSDeploy.exe(Web Deploy 2)在Web服务器上部署它
我尝试过4种情况:
通过VS2010发布方法,设置如下:
发布方法:Web部署
服务网址:https://开头MyServerName:8172/MsDeploy.axd
网站/应用:MyWebSiteName
允许不可信:检查
用户名:MyUserName输入
密码:MYPASSWORD
此方法的工作就好了.
在MyServerName机器上,我运行Web管理服务; 我有一个网站MyWebSiteName,一个应用程序MyWebAppName和MyUserName是一个IIS管理器.
通过VS2010发布方法,设置如下:
发布方法:Web部署
服务网址:https://开头MyServerName:8172/MsDeploy.axd
网站/应用:MyWebSiteName/MyWebAppName
允许不可信:检查
用户名:MyUserName输入
密码:MyPassword输入
此方法的工作就好了.
通过MSDeploy.exe命令行(PowerShell脚本内)
$源= "的contentPath = '...._ PublishedWebsites\MyWebApp'"
$目的地="的contentPath = MyWebSiteName,计算机名='https://开头FC-wapps审:8172 /MsDeploy.axd?Site=WebSiteTest',Username=MyUsername,Password=MyPassword,AuthType=basic"
MSDeploy -verb:同步-源:$来源-dest:$目的地-allowUntrusted
这种方法也能正常工作.
通过MSDeploy.exe命令行(PowerShell脚本内)
$源= "的contentPath = '...._ PublishedWebsites\MyWebApp'"
$目的地="iisApp = MyWebSiteName/MyWebAppName,计算机名='https://开头FC-wapps审:8172/MsDeploy.axd网站= WebSiteTest/MyWebAppName",用户名= MyUserName输入,密码= MyPassword输入,=进行AuthType基本"?
MSDeploy -verb:同步-源:$来源-dest:$目的地-allowUntrusted
这种方法是行不通的.我收到以下错误.
错误代码:ERROR_USER_UNAUTHORIZED
更多信息:使用Web管理服务连接到目标计算机("MyServerName"),但无法进行授权.确保您使用的是正确的用户名和密码,您所连接的站点是否存在,以及凭据是否代表具有访问该站点权限的用户.
错误:远程服务器返回错误:(401)未经授权.
我一直在寻找什么是实际工作MSDeploy命令方法2层的用途和我一样的东西:
msdeploy.exe
-source:清单="...\MyWebApp.SourceManifest.xml"
-dest:汽车,计算机名=的"https: //MyServerName:8172/MsDeploy.axd?site=WebSiteTest',UserName='MyUsername',Password='MyPassword',IncludeAcls='False',AuthType='Basic"
-verb:同步
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-skip:对象名= 'dirPath',absolutepath = '...\$的App_Data'
-setParam:一种= 'ProviderPath',范围= 'IisApp',匹配= '^ ...\PackageTmp $',值= WebSiteTest/WebAppTest
-setParam:一种= 'ProviderPath',范围= 'SETACL',匹配= '^ ..\PackageTmp …
目前我正在尝试创建Web部署包.所以我在我的项目的根目录中添加了一个parameters.xml,并指定了一些自定义参数.我发现我的很多参数都是一样的.所以我想做一些参数引用.寻找这个,我来了Web应用程序包的 accros 参考.在那里它说:
隐藏 - 作为安装UI的一部分,不向用户显示隐藏参数.隐藏参数必须设置defaultValue.这些参数用于设置硬编码的默认值或设置计算的默认值.在建立参数以供将来使用时,有时会使用硬编码默认值.计算值用于从其他参数构造参数的值.构造计算值时,可以通过将{} s包围的其他参数名称放在您想要值的位置来引用其他参数.有关此标记的常见用法,请参阅示例中的"连接字符串"参数.
因此,根据文档,通过在"vdeDashboardAddress"上设置属性defaultValue ="https:// {vdeHostname} /"和tags ="Hidden",可以从"vdeDashboardAddress"引用参数"vdeHostName".
这导致我为parameters.xml提供以下代码:
<parameters>
<parameter name="vdeHostname" description="Please provide the hostname" defaultValue="www.test.com">
<description culture="en">The hostname of the website.</description>
<parameterEntry kind="XmlFile"
scope="obj\\Release\\Package\\PackageTmp\\Configuration\\hosts\.config$"
match="/hostConfigurationSection/hostConfigurations/add[@name='Default']/@host" />
</parameter>
<parameter name="vdeDashboardAddress" defaultValue="https://{vdeHostname}/" tags="Hidden">
<description culture="en">The https address of the Dashboard.</description>
<parameterEntry kind="XmlFile"
scope="obj\\Release\\Package\\PackageTmp\\Configuration\\identity\.config$"
match="/system.identityModel/identityConfiguration[@name='Default']/audienceUris/add/@value" />
</parameter>
<parameters>
Run Code Online (Sandbox Code Playgroud)
但是,情况似乎并非如此.它不引用/替换defaultValue中属性的各个部分.目前正在输出:
<audienceUris>
<add value="https://{vdeHostname}/" />
</audienceUris>
Run Code Online (Sandbox Code Playgroud)
我在这里找到的唯一提到我的问题的线程是如何让Deploy.cmd填充Parameters.xml中的替换字段
先感谢您!
最好的问候,rdvanbuuren
我无法做到这一点,因此从Visual Studio中发布不会删除服务器网站上的App_Data文件夹。但我也希望它继续删除所有文件(该文件夹除外),以保持目录“干净”。
我已经在csproj,.pubxml中进行了尝试。以及它的修改(不是OnBeforePackageUsingManifest,而是iis)
<PropertyGroup>
<OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
<ItemGroup>
<MsDeploySkipRules Include="SkipDeleteAppData">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipDeleteAppData">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
如果我使用“ SkipAction = Delete”,那我什至无法执行,因为无法识别删除。
有什么办法吗?最好来自.pubxml,但csproj也可以。不必处理msdeploy命令行。
使用Visual Studio 2015。
msdeploy ×10
webdeploy ×3
.net ×2
asp.net ×2
azure-devops ×2
web-config ×2
asp.net-mvc ×1
c#-10.0 ×1
deployment ×1
manifest ×1
package ×1
parameters ×1
windows ×1