使用 Visual Studio 2013
我有一组 8 个 SSDT 项目,它们都可以部署到几个不同的环境中。但是,每个项目的高级发布设置应该是相同的。目前,我为每个环境创建了一个不同的发布配置文件,这意味着我有大约 20 个发布配置文件,它们都使用完全相同的设置但不同的连接字符串。
调整我的数据库的发布设置(这种情况经常发生,因为我对 SSDT 还是有点陌生)是最烦人的,但我还没有找到解决这个问题的方法,因为我无法像我一样应用转换来发布配置文件到 ASP.NET 项目中的 web.config 文件。我什至尝试安装 Visual Studio SlowCheetah 插件,但它似乎不适用于 SSDT 项目,因为右键单击发布配置文件时不会出现应用转换的选项。
我不希望我的团队在将数据库部署到开发或 QA 环境时必须考虑手动输入连接详细信息。有没有办法设置主发布配置文件或以其他方式指定一组共享设置,这样我就不必管理 20 个几乎相同的发布配置文件?
编辑:使用 SAS 的答案,我能够为我的 .sqlproj 文件拼凑以下 XML:
<PropertyGroup>
<PublishProfileDir>$(ProjectDir)Publish Profiles\</PublishProfileDir>
<TemplatePublishProfile>$(PublishProfileDir)Baseline\publish.xml</TemplatePublishProfile>
</PropertyGroup>
<Target Name="CopyXml" AfterTargets="Build">
<Copy SourceFiles="$(TemplatePublishProfile)" DestinationFolder="$(PublishProfileDir)Dev"/>
<Copy SourceFiles="$(TemplatePublishProfile)" DestinationFolder="$(PublishProfileDir)Qa"/>
</Target>
<ItemGroup>
<DevPublishUpdates Include="ConfigUpdates">
<XPath>/msb:Project/msb:PropertyGroup/msb:TargetDatabaseName</XPath>
<NewValue>CountyRecordsDev</NewValue>
</DevPublishUpdates>
<DevPublishUpdates Include="ConfigUpdates">
<XPath>/msb:Project/msb:PropertyGroup/msb:DeployScriptFileName</XPath>
<NewValue>CountyRecords.Dev.Sql</NewValue>
</DevPublishUpdates>
</ItemGroup>
<Target Name="UpdateXml" AfterTargets="CopyXml">
<Message Text="Editing Derived Xml Publish Profiles" Importance="high" />
<XmlPoke Namespaces="<NamespacePrefix='msb'Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlInputath="$(PublishProfileDir)Dev\publish.xml"
Query="%(DevPublishUpdates.XPath)"
Value="%(DevPublishUpdates.NewValue)" />
</Target>
唯一的缺点是我似乎需要一个单独的文件夹来存放我的所有发布配置文件,以防止一个转换覆盖另一个转换,我似乎无法找到一种简单地覆盖现有文件的方法。对于 XmlPoke,命名空间属性对操作至关重要。我从Sayed Ibrahim Hashimi的这篇博文中了解了更多关于这个过程的信息。