Как включить созданный проект базы данных, созданный dacpac, в проект cs

У меня есть отдельный проект базы данных, который я хотел бы построить в том же решении, а затем сослаться на созданный dacpac. Когда я пытаюсь добавить проект базы данных, он отлично строится, и dll добавляется во вторичный файл проекта, но dacpac - нет.

Есть ли способ скопировать dacpac в мой основной проект через msbuild? Я продолжаю думать, что должен быть способ изменить либо файл sqlproj, либо файл csproj, чтобы dacpac был включен в качестве одного из выходных данных проекта. Мои познания в msbuild не обширны, я не смог разобраться.

Мне кажется, что мне нужно как-то добавить dacpac, чтобы сказать элемент '@(ReferenceCopyLocalPaths)', но я не смог понять это. Любые советы или предложения будут оценены.

Я попытался сделать что-то вроде того, что здесь упоминается 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>

что ничего не дает для DacPac (при добавлении подстановочного знака). Также я попытался сослаться на одну из групп элементов из файла sqlproj, но он оказался пустым:


person Karl    schedule 10.02.2014    source источник
comment
У вас это сработало?   -  person Justin    schedule 15.03.2016
comment
Очевидно нет... У меня такая же проблема :(   -  person glacasa    schedule 01.12.2016


Ответы (2)


В свойствах проекта вы можете добавить командную строку события перед сборкой, чтобы получить копию файла dacpac.

Событие перед сборкой для копирования dacpac

Или вы можете просто добавить его в csproj:

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

Это будет работать только в том случае, если проект базы данных был создан первым, поэтому вам следует добавить зависимость. Щелкните правой кнопкой мыши решение и выберите Project Dependencies..., затем выберите основной проект и убедитесь, что он зависит от проекта базы данных.

введите здесь описание изображения

person glacasa    schedule 27.12.2016

Добавьте это в свой csproj:

  <ItemGroup>
    <Content Include="..\DatabaseProject\bin\Debug\DatabaseProject.dacpac">
      <Link>DatabaseProject.dacpac</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
person Tim Abell    schedule 09.09.2020
comment
Это было бы здорово, но это не сработает, когда я переключусь на конфигурацию Release. - person marbel82; 15.02.2021
comment
Может быть, я нашел решение. Вы можете скопировать файл из другой конфигурации в Debug в DatabaseProject Событие после сборки: if "$(Configuration)" NEQ "Debug" xcopy /y DatabaseProject.dacpac ..\Debug\ - person marbel82; 15.02.2021
comment
Вы правы, в настоящее время мой ответ жестко запрограммирован для отладки; возможно, вы сможете использовать заполнитель для выходного пути на основе текущей конфигурации sln, но я не зашел так далеко, я просто надеюсь, что в какой-то момент мы сможем поджечь dacpacs в нашем sln и забыть об этом навсегда случилось. Содрогаться. - person Tim Abell; 15.02.2021