2012-07-05 12 views
7

में msbuild गुणों का उपयोग कैसे करें I मैंने अपने मौजूदा SQL Server 2008 r2 .dbproj को SQL Server 2012 .sqlproj (SQL सर्वर डेटा टूल्स का उपयोग करके) में अपग्रेड किया है।sqlproj (SQL Server 2012) स्क्रिप्ट

<ItemGroup> 
    <SqlCommandVariableOverride Include="ProjectDirectory=$(MSBuildProjectDirectory)" /> 
</ItemGroup> 

कौन सा मैं तो इस्तेमाल कर सकते हैं:

इससे पहले, मैं संपादन परियोजना फ़ाइल में निम्न तत्व जोड़कर MSBuild मानों का उपयोग करने से मूल्य मेरी परियोजना में एक SQLCMD चर को परिभाषित है, और फिर परिभाषित करने में सक्षम था मेरी पोस्ट डिप्लॉयमेंट स्क्रिप्ट में इस तरह:

SELECT * INTO dbo.MyTable FROM dbo.MyTable WHERE 1=2 
BULK INSERT dbo.MyTable 
FROM '$(ProjectDirectory)\data\dbo.MyTable.dat' 
WITH (DATAFILETYPE = 'widenative') 

हालांकि, अपग्रेड के बाद, यह अब काम नहीं कर रहा है।

मैंने उसी एसक्यूएलप्रोज़ में उसी प्रविष्टि को जोड़ने का प्रयास किया है, लेकिन प्रकाशित कार्यक्षमता इसे चुनने के लिए प्रतीत नहीं होती है और मुझे एक मूल्य प्रदान करना चाहता है। अगर मैं $(MSBuildProjectDirectory) की आपूर्ति करता हूं, जिसका अर्थ शाब्दिक रूप से व्याख्या किया जाता है और विफल रहता है।

नए शासन के तहत, स्थानीय फ़ाइलपैथ निर्दिष्ट करने और/या msbuild मानों का उपयोग करने के लिए तंत्र क्या है?

उत्तर

2

एक एसक्यूएल सर्वर 2012 एसक्लप्रोज़ (एसएसडीटी डेटाबेस प्रोजेक्ट) में आप प्रकाशन प्रोफाइल का उपयोग करते हैं। आप अपने डेटाबेस प्रोजेक्ट पर राइट-क्लिक करके और 'प्रकाशित करें' चुनकर शुरू कर सकते हैं।

फिर आप वांछित विकल्प सेट कर सकते हैं और इन्हें अपने प्रोजेक्ट में तथाकथित प्रकाशन प्रोफ़ाइल में सहेज सकते हैं। इस प्रोफ़ाइल को डबल-क्लिक करने से प्रकाशन विकल्प विज़ार्ड सही विकल्प सेट के साथ लॉन्च करता है।

में अपने प्रकाशित प्रोफ़ाइल आप sqlcmd चर के लिए हार्ड-कोडेड मान शामिल कर सकते हैं:

<ItemGroup> 
    <SqlCmdVariable Include="ProjectDirectory"> 
     <Value>UNKNOWN</Value> 
    </SqlCmdVariable> 
</ItemGroup> 

अगर वांछित, तुम निर्माण के दौरान डायनामिक मानों के साथ इन अद्यतन कर सकते हैं। आपके एमएसबिल्ड प्रोजेक्ट में:

<Target Name="SetProjectDirectoryInPublishXml"> 
    <ItemGroup> 
     <Namespaces Include="nsMsbuild"> 
      <Prefix>nsMsbuild</Prefix> 
      <Uri>http://schemas.microsoft.com/developer/msbuild/2003</Uri> 
     </Namespaces> 
    </ItemGroup> 
    <ItemGroup> 
     <SSDTPublishFiles Include="$(SolutionBinFolder)\**\*.publish.xml" /> 
    </ItemGroup> 
    <MSBuild.ExtensionPack.Xml.XmlFile Condition="%(SSDTPublishFiles.Identity) != ''" 
            TaskAction="UpdateElement" 
            File="%(SSDTPublishFiles.Identity)" 
            Namespaces="@(Namespaces)" 
            XPath="//nsMsbuild:SqlCmdVariable[@Include='ProjectDirectory']/nsMsbuild:Value" 
            InnerText="$(MSBuildProjectDirectory)"/> 
</Target> 

इसके लिए एक्सएमएल अपडेट करने के लिए एक एक्सटेंशन की आवश्यकता है। मैं msbuild एक्सटेंशन पैक का उपयोग करता हूं।

इस तंत्र के लिए क्रेडिट Jamie Thomson

पर जाएं
संबंधित मुद्दे