6

我有一个单独的数据库项目,我想在同一个解决方案中构建它,然后引用创建的 dacpac。当我尝试添加数据库项目时,它构建得很好,并且 dll 被添加到辅助项目文件中,但 dacpac 不是。

有没有办法可以通过 msbuild 将 dacpac 复制到我的主项目中?我一直认为应该有一种方法可以修改 sqlproj 文件或 csproj 文件,以便将 dacpac 作为项目输出之一包含在内。我对 msbuild 的了解并不广泛,我一直无法弄清楚。

在我看来,我需要以某种方式添加 dacpac 以说出“@(ReferenceCopyLocalPaths)”项目,但我无法弄清楚。任何提示或建议将不胜感激。

我尝试做一些类似于此处引用的MSBuild - ItemGroup of all bin 目录在子目录中的操作:

   <Target Name="AfterBuild">
    <Message Text="@(MainAssembly)" />
    <!--<DacPacs Include="%(ProjectReference.Directory)**"  />-->
    <ItemGroup>
      <DacPacs Include="%(ProjectReference.Directory)**/*bin*/*.dac" />
    </ItemGroup>
    <Message Text="@(ReferenceCopyLocalPaths)" />
    <Message Text="DacPacs: @(DacPacs)" />
    <Message Text="Target Database: $(TargetDatabase)" />
  </Target>

这对 DacPacs 没有任何帮助(添加通配符时)。我还尝试从 sqlproj 文件中引用其中一个项目组,但结果为空:

4

2 回答 2

3

在项目属性中,您可以添加预构建事件命令行以获取 dacpac 文件的副本。

复制 dacpac 的预构建事件

或者您可以将其添加到 csproj 中:

<PropertyGroup>
  <PreBuildEvent>copy "$(SolutionDir)DatabaseProject\bin\$(ConfigurationName)\DatabaseProject.dacpac" "$(ProjectDir)\DatabaseProject.dacpac"</PreBuildEvent>
</PropertyGroup>

这仅在首先构建数据库项目时才有效,因此您应该添加一个依赖项。右键单击解决方案并选择Project Dependencies...,然后选择主项目并检查它是否依赖于数据库项目。

在此处输入图像描述

于 2016-12-27T08:48:09.873 回答
1

将此添加到您的 csproj:

  <ItemGroup>
    <Content Include="..\DatabaseProject\bin\Debug\DatabaseProject.dacpac">
      <Link>DatabaseProject.dacpac</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
于 2020-09-09T09:41:52.800 回答