如何将创建的数据库项目包含在cs项目中创建dacpac

时间:2014-02-10 02:34:57

标签: c# msbuild sqlproj

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

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

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

我尝试做一些类似于MSBuild - ItemGroup of all bin directories within subdirectories所引用的内容:

   <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文件中的一个项目组,但它是空的:

2 个答案:

答案 0 :(得分:1)

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

Pre-build event to copy dacpac

或者你可以在csproj中添加它:

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

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

enter image description here

答案 1 :(得分:0)

将此添加到您的csproj:

  <ItemGroup>
    <Content Include="..\DatabaseProject\bin\Debug\DatabaseProject.dacpac">
      <Link>DatabaseProject.dacpac</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>