2012-03-31 40 views
5

मैं स्वचालित निर्माण सर्वर प्रसंस्करण के अंदर डेटाबेस प्रोजेक्ट (डीबीप्रोज़ प्रारूप, नया एसएसडीटी sqlproj नहीं) को तैनात करने की कोशिश कर रहा हूं। मैंने पाया निम्नलिखित:क्यों एमएसबिल्ड कार्य डेटाबेस को तैनात करने में विफल रहा, लेकिन एक्सेल ठीक काम करता है

जब मैं अपने MSBuild लिपि में Exec कार्य के साथ तैनात फोन कर रहा हूँ - सब कुछ ठीक काम कर रहा:

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

लेकिन जब मैं MSBuild कार्य के साथ इस दोहराने की कोशिश - इसे दूसरे तरीके से बर्ताव करता है:

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

MSBuild कार्य DeployDatabaseConnectionString में अर्धविराम पर तोड़ दिया:

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

यह इस तरह की कुछ रिपोर्ट करेगा:

नाम "एकीकृत सुरक्षा" में एक अवैध वर्ण " है।

लेकिन अगर मैं प्रतिशत एन्कोडिंग मूल्य के साथ अर्धविराम की जगह -% 3 बी - यह SqlDeployTask अंदर तोड़ दिया जाएगा:

त्रुटि MSB4018: "SqlDeployTask" कार्य अप्रत्याशित रूप से विफल रहा है।

एसक्यूएलप्रोजेक्ट के लक्ष्य को तैनात करने के लिए TargetConnectionString को पास करने का सही तरीका क्या है?

पीएस: मैं निष्पादन कार्य ठीक से रह सकता हूं, लेकिन msbuild.exe को msbuild script के अंदर कॉल करने के लिए बस मेरे आंतरिक पूर्णतावादी व्यक्ति को दर्द होता है।

उत्तर

4

मुझे उचित तरीका मिला - नया एमएसबिल्ड आइटम पर अतिरिक्तप्रॉपर्टी मेटाडेटा को परिभाषित करने की अनुमति देता है। तो इस सुविधा के साथ सब कुछ ठीक काम करता है और \ 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" /> 
से बचने में कोई समस्या नहीं है