我是一个持续交付的迷,我对自动构建,测试和部署过程充满热情.我真正需要一些帮助的一件事是在自动部署中部署数据库迁移脚本时的最佳实践.这些是我的技术堆栈的相关细节.
目前我能够使用Web Deploy 2.0工具部署我们的ASP.NET MVC网站(哇,设置很有趣!).MSDeploy有一个'dbFullSql'提供程序,但这只能用于部署整个数据库,而不能用于迁移.MSDeploy打开门以进行扩展,使用'runCommand'提供程序在远程服务器上执行任意进程.我想我可以利用它来执行我的迁移脚本.但是,我觉得应该有更好的方法来做到这一点.
在回答时请记住,我希望将MSDeploy用于与远程部署目标的所有交互.虽然如果你知道一个可以用来将迁移安全地推送到不是MSDeploy的远程目标的工具,我也有兴趣听到这个!
编辑:回答者(他们删除了他们的答案!)参考了以下文章:http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/deploying-database-项目
这是一个我不知道的极好的资源.大多数内容我都以某种形式阅读过,不幸的是,这篇特别的文章再次证实了我自己的怀疑.从本质上讲,没有简单的方法可以使用当前工具推送自定义增量更新(在未来的版本中,典型的MS风格的软件承诺可以提供更好的功能).
在它提到的文章主题的说明中.
...使用VSDBCMD是增量数据库发布的推荐方法.
但是VSDBCMD只能在源和目标之间生成增量脚本,我根本不信任迁移,特别是在生产部署上.本文提到的通过Web Deploy推送增量更新的唯一解决方案是创建一个包含自定义SQL迁移脚本的自定义WPP目标文件.
您可以将Web Deploy配置为运行数据库项目生成的SQL部署脚本,但为了执行此操作,您需要为Web应用程序项目创建自定义WPP目标文件.这为部署过程增加了大量复杂性.此外,Web Deploy不直接支持对现有数据库的增量更新.有关此方法的详细信息,请参阅将Web发布管道扩展到包数据库项目部署的SQL文件.
哎呀!它确实看起来很复杂.我以前读到过这个,我希望有更好的方法.到目前为止,我仍然倾向于执行SQLCMD的MSDeploy'runCommand'提供程序.
我使用Microsoft的Web Deploy Remote Agent服务,允许我从Visual Studio中轻松地将代码发布到服务器.
我正在部署的网站使用log4net将消息记录到日志文件,每次我尝试部署新版本的代码时,我在Visual Studio中收到此错误,指出当前的log4net日志文件正在使用中:
在远程计算机上处理请求时发生错误.文件'Web.log'正在使用中.
该进程无法访问"C:\ inetpub\wwwroot\Logs\Web.log",因为它正由另一个进程使用.
我可以通过进入服务器并iisreset在发布之前进行解决来解决这个问题...但这有点打败了从Visual Studio中"轻松"发布的观点:)
有没有什么方法可以让发布任务自动发出iisreset,或者其他方式我可以解决这个问题?
我正在设置CI和D的申请.我创建了一个DEV-Deploy web.config转换,其中包含dev测试环境的连接字符串.

以下是Web.DEV-Deploy.config连接字符串部分的内容:
<connectionStrings xdt:Transform="RemoveAttributes(configSource)">
<add name="DbContext"
providerName="MySql.Data.MySqlClient"
connectionString="CXN_STRING"
xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="elmah"
connectionString="CXN_STRING"
xdt:Transform="Insert" xdt:Locator="Match(name)"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
它应该看起来像:
<connectionStrings>
<add name="DbContext" providerName="MySql.Data.MySqlClient"
connectionString="CXN_STRING"/>
<add name="elmah" connectionString="CXN_STRING"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
我正在使用命令行构建,我尝试了以下命令,这些命令都不起作用:
msbuild web\web.csproj /T:Package /P:Configuration=DEV-Deploy /P:TransformConfigFiles=true
msbuild web\web.csproj /T:Package /P:Configuration=DEV-Deploy /t:TransformWebConfig
Run Code Online (Sandbox Code Playgroud)
部署任务如下所示:
web.deploy.cmd /Y /M:https://MACHINEIP:8172/msdeploy.axd -allowUntrusted /U:USERNAME /P:PASSWORD /A:Basic
Run Code Online (Sandbox Code Playgroud)
web.config在部署时看起来像这样:
<connectionStrings configSource="connectionStrings.config"></connectionStrings>
Run Code Online (Sandbox Code Playgroud)
我已经在我的本地计算机上尽我所能测试并且无法复制该问题.我需要做什么才能使转换在构建中正常工作?
我无法发布(WebDeploy)我的Azure Function应用程序(这是一个耐用的功能,我知道这无关紧要,但是以防万一)。今天开始发生这种情况。
我的Visual Studio的输出窗口中出现“发布失败”弹出窗口和以下错误消息。
错误信息
<ProjectName> -> C:\search\source\<Solution Folder>\obj\Release\netstandard2.0\PubTmp\Out\
C:\Program Files\dotnet\sdk\2.1.202\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\PublishTargets\Microsoft.NET.Sdk.Publish.MSDeploy.targets(139,5): error : Web deployment task failed. (Could not connect to the remote computer ("<functionappname>.scm.azurewebsites.net"). On the remote computer, make sure that Web Deploy is installed and that the required process ("Web Management Service") is started. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE.) [<projectname>.csproj]
C:\Program Files\dotnet\sdk\2.1.202\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\PublishTargets\Microsoft.NET.Sdk.Publish.MSDeploy.targets(139,5): error : The requested resource does not exist, or the requested URL is incorrect. [<projectname>.csproj]
C:\Program Files\dotnet\sdk\2.1.202\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\PublishTargets\Microsoft.NET.Sdk.Publish.MSDeploy.targets(139,5): error : Error details: [<projectname>.csproj]
C:\Program Files\dotnet\sdk\2.1.202\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\PublishTargets\Microsoft.NET.Sdk.Publish.MSDeploy.targets(139,5): error : Could …Run Code Online (Sandbox Code Playgroud) 我在使用带有IIS 6的Web Deploy的appHostConfig提供程序时遇到问题.我没有在文档中看到任何内容,说我不能或者我需要安装额外的东西.
我知道我想在IIS的更高版本中做什么.如果我在IIS 7.5(Windows 7)上运行以下命令,它将创建Default Web Site我在IIS管理器中可以看到的副本.
"C:\Program Files (x86)\IIS\Microsoft Web Deploy V2\msdeploy.exe"
-verb:sync
-source:apphostconfig="Default Web Site"
-dest:apphostconfig="Created from command line"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在IIS 6(Windows 2003)上执行完全相同的操作时,我收到以下消息:
错误:无法创建"appHostConfig"类型的对象和"默认网站"路径.
错误:发出了一个需要IIS配置系统但系统不可用的命令.确保您使用的是包含配置系统的IIS版本.
我可以在IIS 6中执行此操作,还是需要以不同的方式执行某些操作?
我正在尝试将Web部署工具包与我们的MVC3项目一起使用,整体部署工作正常但我们的数据库连接字符串的密码包含百分比(%)字符,后跟两个数字.部署工具包似乎正在将其转换为Hex字符替换.有没有办法防止这个字符替换并仍然保持连接字符串在开发人员机器上可用?我尝试在Web.Debug.Config文件中添加替换,甚至添加%25而不仅仅是%来尝试让它替换%字符,它仍然替换完整的值.
例:
<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
被取代
<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123r;database=Database1;"
</connectionStrings>
Run Code Online (Sandbox Code Playgroud) 通过Visual Studio(在本例中为2014)中的"发布"命令使用IIS WebDeploy发布Web应用程序时,将上载除主程序集PDB文件之外的所有文件.
web.config已debug=false设置.相关的构建配置只有pdb-set,发布配置文件设置为发出调试信息.
为什么没有上传pdb文件?

相当令人困惑的是,包含了编译的MVC视图的pdb文件,而不是所使用的任何实际程序集的pdbs.
添加文件(domain\bin\App_Web_x13lezpq.pdb).// MVC编译视图更新文件(domain\bin\MyWebApplication.dll).//主DLL没有上传PDB,但无论如何都会在bin文件夹中生成一个.
我正在尝试创建PowerShell v5脚本来构建和发布VS2017 WCF Web服务应用程序(.NET Framework 4),以便我可以在Bamboo中自动执行它.我有msbuild命令正常工作,正确构建,现在我需要使用FolderProfile将项目发布到文件夹.
通过右键单击项目并选择发布,然后选择FolderProfile,我可以手动成功完成.这会将需要部署的文件放在项目的bin\Release\PublishOutput位置中.我想在Powershell脚本中自动化该发布.
我在Sayed Hashimi的网站上尝试了这个建议,类似于下面的内容(我只使用15.2的VS2017版本,当然,用我的实际值替换项目名称和配置文件);
msbuild MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=<profile-name> /p:Password=<insert-password> /p:VisualStudioVersion=15.2
Run Code Online (Sandbox Code Playgroud)
但这并没有把任何文件放在该bin\Release\PublishOutput位置.看起来它只是做了一个标准的构建.
编辑:
当我运行上面的命令时,msbuild在输出中列出了这一行;
DeploymentUnpublishable:
Skipping unpublishable project.
Run Code Online (Sandbox Code Playgroud)
我在GitHub 上看了这篇文章,有些人引用了一个解决方案,更新到VS2017的v15.2,我已经做过了;
Microsoft Visual Studio Enterprise 2017
Version 15.2 (26430.16) Release
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑 - 解决方案
@ Leo-MSFT提供了这个解决方案......
msbuild myproject\myproject.vbproj /p:DeployOnBuild=true /p:PublishProfile=FolderProfile.pubxml /p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)
这将文件放入bin\release\PublishOutput.
我花了好几天寻找这个解决方案,我又增加了其他建议SO各种命令的参数和GitHub的论坛帖子,如/t:Publish,/p:PublishProfileRootFolder和/p:VisualStudioVersion=15.2.我删除了那些,只是使用上面的行,最后创建了我需要的已发布输出.
msbuild powershell visual-studio webdeploy visual-studio-2017
我正在构建一个可部署的Web包,可以导入到IIS中,自动提示我的ASP.NET Core应用程序所需的设置.我已经创建了一个可以正常部署的软件包,除了在部署之后,我需要手动查找/编辑我的appsettings.json文件.
我知道这个软件包可以包含一个parameters.xml文件,该文件会在将应用程序导入IIS时自动提示并填写我的appsettings.json.我已经创建了一个parameters.xml文件,并在构建之后手动将其添加到我的包中; 它按预期工作.我想让msbuild为我自动将parameters.xml文件添加到包中.
我的一个单独的项目(ASP.NET MVC 4)已经做到了这一点.为此,我只需要将我parameters.xml放在与.csproj相同的文件夹中.我试着在这里做同样的事,但没有运气.
我创建了一个ASP.NET核心Web应用程序
在ASP.NET Core 1.1上使用.NET Framework
然后我去发布我的网站
然后我编辑了配置文件并将其更改WebPublishMethod为Package并在其下方添加了三行.
<DesktopBuildPackageLocation>bin\$(Configuration)\$(MSBuildProjectName).zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath>External</DeployIisAppPath>
Run Code Online (Sandbox Code Playgroud)
然后我又发表了一次.现在我得到一个可以部署到IIS的WebDeploy包.
大!但...
我想自定义parameters.xml.
对于以前的项目,我能够将parameters.xml文件添加到项目根目录,VS/msbuild会自动将其添加到我发布的包中.这当前适用于使用ASP.NET MVC 4的不同项目.
所以,我为这个项目尝试了同样的事情.首先,我添加了一个settings.json,设置非常简单:
{
"SettingName": ""
}
Run Code Online (Sandbox Code Playgroud)
然后我添加了一个parameters.xml我认识的文件到我的项目根目录.(如果我手动替换Sample.zip包中的parameters.xml文件,它会在部署时正确提示并替换我的设置)
<parameters>
<parameter name="IIS Web Application Name" value="External" tags="IisApp">
<parameterEntry kind="ProviderPath" scope="IisApp" match="^c:\\users\\joshs\\documents\\visual\ studio\ 2017\\Projects\\Sample\\Sample\\obj\\Release\\net461\\win7-x86\\PubTmp\\Out\\$" />
</parameter>
<parameter name="Setting Name" description="Enter a custom app setting" defaultValue="Default Setting Value">
<parameterEntry kind="TextFile" scope="obj\\Debug\\net461\\win7-x86\\PubTmp\\Out\\appsettings\.json$" match="(?<=\"SettingName\"\s*:\s*\")[^\"]*" />
</parameter>
</parameters>
Run Code Online (Sandbox Code Playgroud)
再次,我再次点击右键Publish …
我能够成功对 Azure 应用服务执行 Web 部署,但随后找不到 Web 应用程序。
我部署了一个在本地运行良好的 ASP.NET Core 2.2 Web 应用程序。在门户网站上,没有任何问题显示出来。当我通过例如调用它时,
https://xxxxxxxxx.azurewebsites.net/api/values
Run Code Online (Sandbox Code Playgroud)
我收到错误:
您正在查找的资源已被删除、更名或暂时不可用。(404)
webdeploy ×10
msdeploy ×4
msbuild ×3
asp.net-core ×2
asp.net-mvc ×2
azure ×2
.net ×1
asp.net ×1
c# ×1
deployment ×1
iis-6 ×1
pdb-files ×1
powershell ×1
sql-server ×1
web-config ×1