我正在尝试弄清楚如何将 dacpac 文件作为我们解决方案的 nuget 进行处理。
我们有一个巨大的数据库,由生成 dacpac 的 SSDT 项目创建和处理。
我们希望在 DevOps 中创建一个管道,用于根据特定版本创建 nuget 包,并将其发布到 Artifact。所以每个人都可以下载它并在本地重新创建数据库。
这可能吗?
您可以在 SQL 项目中创建一个 .nuspec 文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<package >
<metadata>
<id>My.Database.Dacpac</id>
<version>1.0.0</version>
<authors>You</authors>
<description>Dacpac of My.Database</description>
</metadata>
<files>
<file src="bin\Release\*.dacpac"/>
</files>
</package>
然后在管道中创建 nuget 并推送它:
- task: VSBuild@1
displayName: "Build"
inputs:
solution: '**\*.sln'
configuration: 'Release'
clean: true
- task: NuGetCommand@2
displayName: "Create nuget"
inputs:
command: 'pack'
packagesToPack: '.nuspec'
configuration: 'Release'
versioningScheme: 'off'
- task: DotNetCoreCLI@2
displayName: "Push nuget"
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: 'Change this to your feed'
要在项目中使用它,请先安装它,然后修改以添加GeneratePathProperty:
<PackageReference Include="My.Database.Dacpac" Version="1.0.1">
<GeneratePathProperty>true</GeneratePathProperty>
</PackageReference>
然后你必须添加这个:
<ItemGroup>
<Content Include="$(PkgMy_Database_Dacpac)\My.Database.dacpac">
<Link>My.Database.dacpac</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Pack>true</Pack>
</Content>
</ItemGroup>
有了这一切,您将在输出目录中拥有 dacpac 文件,并且在您的解决方案中也将拥有 nuget 中的链接文件。