标签: msdeploy

使用VS2010进行数据库部署的问题(打包/发布SQL选项卡)

背景:
我正在使用Visual Studio 2010中的部署工具.
我右键单击了我的项目并选择了"打包/发布"设置.把我所有的设置放在那里......

然后我使用"web deploy"将文件传输到运行远程代理服务的远程服务器,这很正常.我在我的Web.Release.config上做的转换做了他们的事情,服务器可以访问我手动创建的数据库.

问题:
我的下一步是让数据库部署也能正常工作.我进入了Package/Publish SQL选项卡并输入了目标数据库的Connection字符串.

(Data Source=MyDBServer;Initial Catalog=Database2;User ID=User;Password=pass)
Run Code Online (Sandbox Code Playgroud)

此数据库为空,准备接受导入.

我还输入了源数据库的连接字符串.它位于同一台服务器上.

(Data Source=MyDBServer;Initial Catalog=Database;User ID=User;Password=pass)
Run Code Online (Sandbox Code Playgroud)

Database Scripting选项设置为Schema和Data(更改此选项没有区别),数据库脚本设置为[Auto Generated Schema and Data]

当我现在部署它时,我收到错误:

错误4 Web部署任务失败.((09/06/2010 16:41:51)在远程计算机上处​​理请求时发生错误.)

(09/06/2010 16:41:51)在远程计算机上处​​理请求时发生错误.目前不期望输入类型"未知".序列化流可能已损坏.

附加信息:
我可以成功创建一个没有问题的包.我查看了zip中的内容,可以看到SQL生成正常(因此连接数据库没有问题).然后,我可以复制此SQL并将其作为新数据库的新查询运行,并且可以很好地创建表和数据.

我似乎无法找出出错的地方,我用Google搜索错误,并且整个互联网上都没有条目.有人有主意吗?

附录:
为了进一步了解可能发生的情况,我将包发送到服务器并使用IIS导入它.它告诉我,我需要SQL Server管理对象.所以我安装了它.接下来尝试它告诉我我的用户没有创建数据库的权限,我认为这一定是问题.:授予访问权限 - 重新运行.通过!所以我删除了所有的表,然后回到VS2010点击发布,我得到了同样的错误.:(

visual-studio-2010 database-deployment msdeploy

6
推荐指数
1
解决办法
3774
查看次数

MSDeploy失败,"远程主机强行关闭现有连接"

提供给命令行的以下MSDeploy字符串会导致错误.任何人都可以对此有所了解吗?

"C:\Program Files\IIS\Microsoft Web Deploy\\msdeploy.exe" -source:package='D:\dev\Project\obj\BuildConfiguration\Package\Project.zip' -dest:auto='Website Name',computerName='computername',userName='username',password='password' -verb:sync -enableRule:DoNotDeleteRule -allowUntrusted -debug
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

Microsoft.Web.Deployment.DeploymentAgentUnavailableException: Could not complete the request to remote agent URL 'http://computername/MSDEPLOYAGENTSERVICE'.
---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)   
--- End of …
Run Code Online (Sandbox Code Playgroud)

msdeploy

6
推荐指数
1
解决办法
5303
查看次数

如何将标记化参数添加到web.config文件中,以便它显示在SetParameters.xml中?

我需要能够在AppSettings部分中将一个参数添加到在使用MSDeploy进行部署的TFS构建期间生成的SetParameters.xml文件中.目前只有连接字符串被标记化.

如何从AppSettings部分添加密钥?

msbuild tfs .net-4.0 msdeploy webdeploy

6
推荐指数
1
解决办法
3002
查看次数

Web部署中的自动提供程序究竟是什么(msdeploy.exe)

有人可以解释(比technet/msdn docs更好)汽车提供商究竟做了什么,它是如何工作的,以及何时使用它.

这与Web部署有关.我看过很多文档指定-dest:auto,这对我来说并没有多大意义.

自动提供程序指定目标上的提供程序与源提供程序相同.

msdeploy.exe -verb:sync -source:appHostConfig ="MySite"-dest:auto,computername = Server1

当destination参数与-source参数相同时,auto提供程序使您可以避免输入-dest参数的完整路径.它还消除了从存档或包中单独复制清单文件的需要.

自动提供程序获取您指定的源并使用目标计算机上的相应位置.例如,如果指定appHostConfig = Site1作为源,则目标计算机上的目标将为Site1.当您希望"按原样"将网站同步到远程计算机时,这非常有用.

technet docs for auto provider

没有意义的例子:

msdeploy.exe -verb:sync -source:package=myapp.zip -dest:auto
Run Code Online (Sandbox Code Playgroud)

为什么要将目标确切地设置为源?有什么意义?你不是简单地用iteslf覆盖源代码吗?

在VS2010中发布包生成的生成的cmd文件生成如下内容:

"C:\Program Files\IIS\Microsoft Web Deploy V2\\msdeploy.exe" -source:package='MySourcePath' -dest:auto"  
Run Code Online (Sandbox Code Playgroud)

不自动意味着源只会覆盖自己吗?但事实并非如此,它实际上更新了IIS网站(基于清单中的设置)

我已经尝试使用包作为目标,在这种情况下,它确实更新了源包而不是IIS站点.

这个问题的催化剂是我正在实施CI,我过去总是使用msbuild/xcopy.我想现在使用msdeploy.我想理解它,而不是简单地调用从visual studio生成的myproject.cmd.

例如,此SO链接指定使用自动提供程序作为dest参数.

谢谢

msdeploy webdeploy

6
推荐指数
1
解决办法
2359
查看次数

将解决方案升级到.NET framework 4.5后,每日部署停止工作

我们成功地使用TFS2010中的msdeploy每天更新我们的开发网站.

这工作正常,直到我们升级到VS2012,我们的应用程序从.NET Framework 4.0升级到4.5,ASP.NET MVC从3.0升级到4.0.看起来一切都很好并且部署了程序集但实际上没有部署任何内容.

我现在已经研究了两天了,无法弄清楚为什么会发生这种情况,现在我的想法已经不多了.

以下是我的构建脚本的一部分,它在升级之前的工作方式.

<MSBuild
                Projects="$(SolutionRoot)\My.Web\My.Web.csproj"
                Properties="MvcBuildViews=False;AllowUntrustedCertificate=True;AuthType=Basic;Configuration=Dev;CreatePackageOnPublish=True;DeployIisAppPath=dev.myweb;DeployOnBuild=True;DeployTarget=MsDeployPublish;MSDeployPublishMethod=WMSvc;MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd;UserName=UserName;Password=Password;UseMsdeployExe=True"
                ContinueOnError="False"
                />
Run Code Online (Sandbox Code Playgroud)

启动升级并且我的问题发现我们使用的是Web Deploy 2.0,但现在我们已升级到Web Deploy 3.0.我也确保我们正在建设ToolsVersion="4.0".

更新 -

msbuild.exe/p:AllowUntrustedCertificate = True/p:AuthType = Basic/p:Configuration = Dev/p:CreatePackageOnPublish = True /p:DeployIisAppPath=dev.myweb/p:DeployOnBuild = True/p:DeployTarget = MsDeployPublish/p: MSDeployPublishMethod = WMSvc /p:MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd/p:UserName = UserName/p:Password = Password/p:UseMsdeployExe = True E:\ Builds\1 \无论\ Daily_Build的\ Sources\My.Web\My.Web.csproj

现在我也尝试从我们的TFS运行上面的msbuild命令,没有任何响应让我完全失望.在TFS的事件日志中没有任何内容,日志文件中没有任何内容,无论冗长...有什么想法吗?

它确实可以使用msdeploy directy,如下所示;

<Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy V3\MSDeploy.exe&quot; -verb:sync -source:contentPath=&quot;E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj&quot; -dest:contentPath=&quot;E:\dev.my.web&quot;,computername=https://10.xxx.xxx.xxx:8172/MsDeploy.axd,username=UserName,password=Password,authtype=Basic -allowUntrusted=True"
              ContinueOnError="false" />
Run Code Online (Sandbox Code Playgroud)

-

更新2 - 似乎Microsoft添加了对可发布项目的类型项目和我们的Web应用程序不是的检查,因为输出类型是类库.这对v4.0有效,但显然不适用于v4.5.

任何人都知道该怎么做让它再次起作用?我需要更改项目类型吗?预先创建发布包,然后部署它?或者是什么?

-

有其他人遇到过同样的问题吗?你找到了分享的解决方案吗?

MSBuild版本可能存在问题吗?

msbuild msdeploy tfs2010 webdeploy .net-4.5

6
推荐指数
1
解决办法
4434
查看次数

在使用ASP.NET 4.5发布配置文件时,如何参数化部署?

ASP.NET 4.5中的新pubxml文件肯定是朝着正确方向迈出的一步.我也喜欢msdeployparameters.xml文件的支持(即使它们有时不像我想的那么强大).现在,我如何组合msdeploy参数和pubxml文件?我希望pubxml文件允许我提供类似的设置

<ParametersFile>productionParameters.xml</ParametersFile>

或者在我的production.pubxml文件中类似的东西,包含web.config在发布到生产环境时要合并的值.这是可能的还是我必须回到我自己的方式来确定参数文件并msdeploy使用-setParamFile ="productionParameters.xml"进行调用?

msdeploy webdeploy asp.net-4.5

6
推荐指数
1
解决办法
4043
查看次数

VS2012 Web Deploy Package创建应用程序池

我在VS2012中有一个Web应用程序项目,我使用"Web部署包"发布.我希望此程序包包含应用程序池设置,特别是创建 IIS应用程序池并将新创建的应用程序分配给它.

我熟悉项目配置为使用IIS实例(不是IIS Express)时可用的"包括此Web项目使用的应用程序池设置"选项,但IIS配置不是项目文件的一部分,因此不是源代码受控.当有人在没有经过精心配置IIS的机器上构建部署包时会发生什么?不理想.

那么,我还可以将AppPool设置添加到我的Web部署包中吗?我知道appPoolConfig提供程序只是IIS7 +,我很好用这个限制.我过去一直反对这个问题,从来没有找到解决方案.18个月后,我们有了一个新的VisualStudio版本和一个新的网络发布管道,是否有新的选项来解决这个问题?或者也许是我第一次解决这个问题时错过了什么?

编辑

好的,我看到以下选项:

  1. 配置我的项目以同步IIS实例中的设置.如上所述,我不喜欢它,因为它将设置置于项目之外,这意味着必须精心配置环境以构建+发布.此外,它还拖拽了我不希望包含的其他IIS设置.
  2. 将某些内容注入Web发布管道(WPP)以修改archive.xml.我过去曾玩过这种玩具并且成功有限.一个问题是管道与直接在archive.xml文件上工作并不完全合作,另一个问题是涉及一些更加神秘的属性,比如MSDeploy.MSDeployProviderOptions看起来有一些Base64编码的二进制文件?不知道该放什么.
  3. 找到一个可以做我想要的现有"提供者".我可能在这里运气不好,appPoolConfig提供者似乎只想读/写IIS,而不是设置的XML文件.有人知道吗?
  4. 编写我自己的"提供者"以生成清单输出条目.我不确定,是否可以编写使用现有提供程序名称写入清单的自定义提供程序?如同,MyCustomPoolProviderappPoolConfig部分写入清单?这听起来像是一种潜在的痛苦运动,可能会或可能不会起作用.我还需要弄清楚进入的编码MSDeploy.MSDeployProviderOptions吗?

我感觉Web Deploy对于我正在努力实现的目标的根本障碍是它严格依赖于"提供者".预先存在的提供程序主要用于IIS同步,而不是主要开发和发布.碰巧这些提供商中的一些可以通过MSBuild 相对容易地连接,但大多数人坚持从IIS中提取数据,就是这样.

iis msdeploy visual-studio-2012

6
推荐指数
1
解决办法
3379
查看次数

如何重命名Web部署?

我有一个Web应用程序项目:

在此输入图像描述

如您所见,有3个robots.txt文件 - 每个环境一个.还有3个发布配置文件.

现在,对于每个pubxml,我想选择正确的"robots.xxx.txt"文件并将其重命名为"robots.txt".理想情况下,我想利用MSBuild并在每个pubxml文件中保留配置.

3个发布配置文件中的每一个都在使用<WebPublishMethod>MSDeploy</WebPublishMethod>.


编辑:

刚试过Richard Szalay回答,但无济于事.所有3个文件仍然复制到输出目录.这就是我的发布配置文件现在的样子

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WebPublishMethod>FileSystem</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish />
        <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
        <PrecompileBeforePublish>True</PrecompileBeforePublish>
        <EnableUpdateable>True</EnableUpdateable>
        <DebugSymbols>False</DebugSymbols>
        <WDPMergeOption>DonotMerge</WDPMergeOption>
        <ExcludeApp_Data>True</ExcludeApp_Data>
        <publishUrl>C:\Temp\myproject</publishUrl>
        <DeleteExistingFiles>False</DeleteExistingFiles>
    </PropertyGroup>

    <ItemGroup>
        <MsDeployReplaceRules Include="robots">
            <ObjectName>filePath</ObjectName>
            <Match>robots\.debug\.txt</Match>
            <Replace>robots.txt</Replace>
        </MsDeployReplaceRules>
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

msbuild msdeploy msbuild-4.0

6
推荐指数
1
解决办法
2468
查看次数

使用MSDeploy发布DACPAC文件,部署后脚本中的UTF8字符将丢失

我有一个在Visual Studio 2013中构建的DACPAC文件,用于SSDT项目.此SSDT项目定义了一个部署后脚本,用于将一些静态数据合并到已发布的表中,一个数据包含一个版权符号.

现在,当我通过Visual Studio发布数据库时,版权符号将被保留,并正确合并到目标表中.当我使用MSDeploy发布相同的数据库(使用相同的dacpac和发布配置文件)时,版权符号将作为"?"合并到目标数据库中.符号.同样,当我使用Action:Script而不是时Action:Publish,生成的SQL脚本包含"?" 而不是版权符号.

似乎Visual Studio脚本生成的脚本是UTF8编码的,但是烘焙到dacpac中的脚本会丢失UTF8编码.有没有人对如何解决这个问题有任何想法?

sql-server utf-8 msdeploy dacpac sql-server-data-tools

6
推荐指数
1
解决办法
939
查看次数

Microsoft.Web.WebJobs.Publish在部署包中生成重复的程序集

我有大量的Azure WebJob,它们都部署到单个Azure App Service,以及同一个Azure App Service上的网站。每个WebJob都使用WebJobs SDK和Microsoft.Web.WebJobs.Publish nuget包(我们是1.0.13版的最新版本)来打包它们以进行部署。以下是我们在CI构建(VSTS)中用于生成部署包的MSBuild参数:

/p:DeployOnBuild=true /p:PublishProfile=Release /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.StagingDirectory)

这将产生一个与“ Azure Web Service Deploy” VSTS任务正常工作的程序包(因为WebJobs可以作为WebJobs正常运行),这不是问题。

问题是.zip文件包复制了所有WebJob程序集。这些重复最终将其复制到Azure应用服务中。

每个WebJob软件包的.zip文件中的文件夹结构为:

- Content/[build agent full path]/
     - app_data/jobs/continuous/[web job name]/[assembly files]
     - bin/[assembly files]
Run Code Online (Sandbox Code Playgroud)

造成问题的原因有3个:

  1. 我们已经开始调查与安全厂商的合作伙伴,后者将对我们的部署程序包进行静态分析。此重复会导致报告问题。
  2. 由于将bin/[assembly files]其发布到App Service,因此它们与网站的程序集相互混合,这些程序集也已部署到同一App Service。
  3. 通过在这些部署程序包中转移所有这些额外的膨胀,会减慢我们的构建/发布时间。我的团队练习“持续交付”,并希望管道能够很快

那么,为什么Microsoft.Web.WebJobs.Publish包bin/[assembly files]中除了必需的之外又添加了app_data/jobs/continuous/[WebJobName]/[assembly files]?更重要的是,如何防止包装过程包括在内bin/[assembly files]

我真的很讨厌不得不添加构建步骤来拆分压缩后的软件包,然后将它们放回去而又不会产生多余的垃圾,或者我不得不想出一种手工制作发布软件包的方法。您有1个工作,Microsoft.Web.WebJobs.Publish!:)

msbuild azure msdeploy azure-webjobs azure-webjobssdk

6
推荐指数
1
解决办法
636
查看次数