我目前正试图在生产服务器上启动并运行我的部署过程。目前,我正在使用web部署和发布配置文件来实现这一点,除了更新连接字符串以适应生产服务器之外,我的一切都正常工作。
我正在使用:
msbuild myProj.csproj /p:DeployOnBuild=true;PublishProfile=myProfile;Configuration=Release
创建发布包,以及:
call myProj.deploy.cmd /Y /M:http://myServer/MSDeployAgentService -allowUntrusted /U:user /:Password
因此,这是有效的,它对其进行打包,然后将其发送到服务器,并正确配置IIS,但指向错误的数据库。
我的发布配置文件如下:
<?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="password"" 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="password"" Name="" />
<Object Type="DbDacFx">
<PreSource Path="Data Source=localhost;Initial Catalog=devDB;User ID=user;Password="password"" includeData="False" />
<Source Path="$(IntermediateOutputPath)AutoScriptsDefaultConnection_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>
令人烦恼的是,当直接从VS2012发布时,这一点很好,只是不通过命令行。我的msbuild调用中可能缺少开关或选项吗?
它不像在我的myProj中那样正常工作。SetParameters.xml文件中显示的连接字符串有错误。如果我手动将这些更改为正确的连接字符串,那么一旦部署,web.xml文件在生产服务器上就是正确的。如何将正确的字符串输入到SetParameters文件中?如有任何帮助,我们将不胜感激。
最后,为了解决这个问题,我在Visual Studio中在项目的根目录中创建了一个Parameters.xml文件,该文件保存了要在生产服务器上使用的连接字符串的值。这些值将被拾取并使用,而不是默认值。
Parameters.xml文件看起来像:
<?xml version="1.0" encoding="utf-8" ?>
<parameters>
<parameter name="DefaultConnection-Web.config Connection String"
description=""
defaultValue=""tags="" />
只需添加所需的数量,并明显地根据需要填充属性即可。
My DefaultConnection也没有更新。结果我不得不删除MyProject>PublishProfiles.pubxml文件。
然后,当试图发布新构建的项目时,它要求我连接到azure并下载发布配置文件。
尽管该向导有一个复选框,可以选择关闭用发布配置文件下拉的字符串覆盖DefaultConnection字符串,但取消选中它没有任何效果。它继续覆盖字符串。
因此,在azure控制面板(门户)中,我单击了网站>我的网站>配置
向下滚动到连接字符串,您可以显示隐藏的连接字符串。我只是通过点击x删除了它,然后在我的网络配置中硬编码了正确的一个。
然后,我再次删除了.pubxml,并再次执行向导。现在,发布配置文件中没有下拉连接字符串。
My Publish-Profile.pubxml文件(位于Project\Properties\PublishProfiles中)已损坏,并带有额外的重复"DefaultConnection-Web.config连接字符串"节点。删除额外的节点后,连接字符串正确更新。