2013-02-13 54 views
4

我目前正试图让我的部署过程在我的生产服务器上运行并运行。目前我正在使用Web部署和发布配置文件来实现此目的,除了更新连接字符串以适应生产服务器之外,我已将所有内容正常工作。MSBuild Web部署不更新连接字符串

我使用:

创建发布包,以及:

call myProj.deploy.cmd /Y /M:http://myServer/MSDeployAgentService -allowUntrusted /U:user /:Password 

所以这个工作,它包,然后将其发送到服务器的罚款,并配置IIS正确,但指向错误的数据库。

我的发布配置文件是这样的:直接从VS2012发布时,只需通过命令行不

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>MSDeploy</WebPublishMethod> 
    <SiteUrlToLaunchAfterPublish /> 
    <MSDeployServiceURL>http://myserver</MSDeployServiceURL> 
    <DeployIisAppPath>Website</DeployIisAppPath> 
    <RemoteSitePhysicalPath /> 
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer> 
    <MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod> 
    <UserName>user</UserName> 
    <_SavePWD>True</_SavePWD> 
    <PublishDatabaseSettings> 
     <Objects xmlns=""> 
     <ObjectGroup Name="DBContext" Order="1" Enabled="False"> 
      <Destination Path="Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password=&quot;password&quot;" Name="" /> 
      <Object Type="DbCodeFirst"> 
      <Source Path="DBMigration" DbContext="myproj.Repositories.DBContext, myproj.Repositories" MigrationConfiguration="myproj.Repositories.Migrations.Configuration, myproj.Repositories" Origin="Configuration" /> 
      </Object> 
     </ObjectGroup> 
     <ObjectGroup Name="DefaultConnection" Order="2" Enabled="False"> 
      <Destination Path="Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password=&quot;password&quot;" Name="" /> 
      <Object Type="DbDacFx"> 
      <PreSource Path="Data Source=localhost;Initial Catalog=devDB;User ID=user;Password=&quot;password&quot;" includeData="False" /> 
      <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" /> 
      </Object> 
      <UpdateFrom Type="Web.Config"> 
      <Source MatchValue="Data Source=localhost;Initial Catalog=devDB;User Id=user;Password=password" MatchAttributes="$(UpdateFromConnectionStringAttributes)" /> 
      </UpdateFrom> 
     </ObjectGroup> 
     </Objects> 
    </PublishDatabaseSettings> 
    </PropertyGroup> 
    <ItemGroup> 
    <MSDeployParameterValue Include="$(DeployParameterPrefix)DBContext-Web.config Connection String"> 
     <ParameterValue> Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password="password"</ParameterValue> 
    </MSDeployParameterValue> 
    <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String"> 
     <ParameterValue>Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password="password"</ParameterValue> 
    </MSDeployParameterValue> 
    </ItemGroup> 
</Project> 

烦人能正常工作。我的msbuild调用中是否存在开关或选项?

它不能正常工作,因为在myProj.SetParameters.xml文件中显示的连接字符串是错误的。如果手动将它们更改为正确的连接字符串,则一旦部署,生产服务器上的web.xml文件就是正确的。如何将正确的字符串放入我的SetParameters文件中?任何帮助将不胜感激。

+0

你确定你的第一个命令是生成一个包吗?您的发布配置文件具有“MSDeploy”的WebPublishMethod,而不是“Package”。 – 2013-02-14 04:22:39

+0

它正在生成包。您可以使用MSDeploy进行部署,也可以使用我正在使用的方法 – Thewads 2013-02-14 08:30:46

+0

替代方案可以对连接字符串替换使用web.config转换,并选择要在执行MSBuild时发布的配置。 – ThomasArdal 2013-02-14 10:16:56

回答

3

为了解决这个问题,在Visual Studio中,我在项目的根目录中创建了一个Parameters.xml文件,它保存了要在生产服务器上使用的连接字符串的值。这些被拾取并使用,而不是默认值。

的的parameters.xml文件看起来像:

根据您的需要
<?xml version="1.0" encoding="utf-8" ?> 
<parameters> 
    <parameter name="DefaultConnection-Web.config Connection String" 
     description="" 
     defaultValue=""tags="" /> 

只需添加尽可能多的和明显的填充属性的要求

0

我DefaultConnection没有任何更新。事实证明,我不得不删除MyProject> PublishProfiles .pubxml文件。

然后,当试图发布新建项目时,它要求我连接到azure并下载发布配置文件。

即使该向导有一个复选框,该选项关闭覆盖默认连接字符串并使用发布配置文件拉下的选项,取消选中该选项不起作用。它继续覆盖字符串。

所以在蔚蓝色的控制面板(门户)我点击网站>我的主页>配置

向下滚动到连接字符串,您可以显示被隐藏的连接字符串。我只是通过点击x来删除它,然后在我的web配置中对正确的一个进行硬编码。

然后我再次删除.pubxml并再次通过向导。现在没有连接字符串正在被发布配置文件拉下来。