2012-03-31 22 views
5

Tôi đang cố gắng triển khai dự án cơ sở dữ liệu (định dạng dbproj, không phải là SSDT sqlproj mới) bên trong xây dựng máy chủ tự động. Tôi thấy như sau:Tại sao công việc Msbuild không triển khai cơ sở dữ liệu, nhưng Exec hoạt động tốt

Khi tôi kêu gọi triển khai với nhiệm vụ Exec trong kịch bản Msbuild của tôi - tất cả mọi thứ làm việc tốt:

<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj 
/t:Deploy 
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\ 
/p:TargetDatabase=$(DeployDatabaseName) 
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" /> 

Nhưng khi tôi cố gắng để lặp lại điều này với Msbuild nhiệm vụ - nó thường chạy khác:

<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj" 
      Targets="Deploy" 
      Properties="Configuration=$(BuildConfiguration); 
      TargetDatabase=$(DeployDatabaseName); 
      TargetConnectionString=&quot;$(DeployDatabaseConnectionString)&quot;; 
      OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\; 
      " /> 

Msbuild nhiệm vụ phá vỡ trên phẩy trong DeployDatabaseConnectionString:

<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString> 

Nó sẽ báo cáo một cái gì đó như thế này:

Tên "Bảo mật tích hợp" chứa ký tự không hợp lệ "".

Nhưng nếu tôi thay thế dấu chấm phẩy với giá trị phần trăm mã hóa -% 3B - nó sẽ phá vỡ bên trong SqlDeployTask:

lỗi MSB4018: Các "SqlDeployTask" nhiệm vụ thất bại bất ngờ.

Cách thích hợp để vượt qua TargetConnectionString để Triển khai mục tiêu của SqlProject là gì?

PS: Tôi có thể sống với nhiệm vụ exec tốt, nhưng thực hiện cuộc gọi đến msbuild.exe bên trong kịch bản msbuild chỉ làm tổn thương người đàn ông cầu toàn bên trong của tôi.

Trả lời

4

Tôi đã tìm được cách thích hợp - Msbuild mới cho phép xác định siêu dữ liệu AdditionalProperties trên mục. Vì vậy, với tính năng này, mọi thứ hoạt động tốt và không có vấn đề gì với việc thoát khỏi \ encoding

<ItemGroup> 
    <DbProjectToBuild Include="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"> 
     <AdditionalProperties>Configuration=$(BuildConfiguration)</AdditionalProperties> 
     <AdditionalProperties>OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\</AdditionalProperties> 
     <AdditionalProperties>TargetDatabase=$(DeployDatabaseName)</AdditionalProperties> 
     <AdditionalProperties>TargetConnectionString="Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False"</AdditionalProperties> 
    </DbProjectToBuild> 
</ItemGroup>   
<MSBuild Projects="%(DbProjectToBuild.Identity)" Targets="Build;Deploy" /> 
Các vấn đề liên quan