Построение dacpa c ссылки на master.dacpa c внутри контейнера windows - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать основную базу данных с ссылками .sqlproj внутри контейнера windows, но я получаю эту ошибку:

C: \ src \ Microsoft.Data.Tools. Msbuild.10.0.61804.210 \ lib \ net46 \ Microsoft.Data.Tools.Schema.SqlTasks.targets (559,5): ошибка сборки SQL72027: файл "C: \ Extensions \ Microsoft \ SQLDB \ Extensions \ SqlServer \ 130 \ SqlSchemas \ master.dacpa c "не существует.

Я прочитал много веток о проблеме, и, насколько я понимаю, master.dacpa c устанавливается только на этапе установки Visual Studio. Однако внутри контейнера я не хочу устанавливать VS.

Если я скопирую master.dacpa c из пути установки моего хоста VS в контейнер, проект будет успешно построен.

My вопрос:

есть ли более чистый способ построить .sqlproj из msbuild, когда он ссылается на master.dacpa c? Мое текущее решение требует предварительной сборки сценария, копирующего master.dacpa c из установочной папки Visual Studio в папку Dockerfile, и мне кажется, что это неправильный путь к go.

На данный момент мой Dockerfile похож на это (псевдокод)

FROM microsoft/dotnet-framework:4.7.2-sdk-windowsservercore-ltsc2019 AS builder
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

WORKDIR C:\src

RUN nuget.exe install Microsoft.Data.Tools.Msbuild

# copy master.dacpac into the container + manually deploy it for msbuild
RUN mkdir C:\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas
COPY master.dacpac C:\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac

# copy sqlproj source code into the container
COPY ${SQLPROJ_SRC_ROOT_DIR} .
RUN msbuild ${SQLPROJ_NAME_WITHOUTEXT}.sqlproj `
      /p:SQLDBExtensionsRefPath="C:\src\Microsoft.Data.Tools.Msbuild.10.0.61804.210\lib\net46" `
      /p:SqlServerRedistPath="C:\src\Microsoft.Data.Tools.Msbuild.10.0.61804.210\lib\net46"
...