2009-05-13 10 views
7

मेरे पास कुछ परियोजनाएं हैं जो SQL सर्वर असेंबली का संदर्भ देती हैं। SQL सर्वर 2005 और SQL Server 2008 के साथ मैं वर्तमान में 2 प्रोजेक्ट फ़ाइलों को बनाए रखता हूं जो एक ही स्रोत फ़ाइलों को इंगित करते हैं और केवल अंतर SQL सर्वर असेंबली के संदर्भ हैं।msbuild के साथ बनाएँ और गतिशील रूप से परियोजना संदर्भ सेट करें

क्या कोई तरीका है कि मैं केवल एक प्रोजेक्ट को बनाए रख सकता हूं और गतिशील रूप से अपनी बिल्ड स्क्रिप्ट में संदर्भ निर्दिष्ट कर सकता हूं?

+0

2005 विधानसभाओं 2008 के खिलाफ काम नहीं है? –

+0

नहीं, लेकिन 2008 के असेंबली 2005 के खिलाफ काम करते हैं। एकमात्र मुद्दा यह है कि मैं इन दो परियोजनाओं को कोडप्लेक्स पर रिलीज़ करता हूं और मैं उन लोगों के लिए रिलीज करना चाहता हूं जिनके पास केवल SQL 2005 है और 2008 के लोगों में से एक है। इनमें से कुछ ये असेंबली जीएसी में हैं (जहां तक ​​मुझे पता है) मैं अपनी सभी निर्भरताओं को फिर से वितरित नहीं कर सकता। और मुझे यकीन नहीं है कि मैं अपने रिलीज आकार को भी फुला देना चाहता हूं, भले ही मैं कर सकूं। –

उत्तर

15

एक ही समस्या के समाधान के लिए सर्च कर रहे हैं आप मैं ItemGroup पर एक स्थिति होने के प्रस्तावित समाधान के लिए आया था था। लेकिन इसका दुष्प्रभाव था क्योंकि विजुअल स्टूडियो संदर्भों में मैं दोनों संदर्भ देख सकता था, जिसने रीशेपर को भी प्रभावित किया था।

आखिर में जब मैं अन्यथा चुनता हूं तो इसका उपयोग करें और मुझे रीशेर्पर और विजुअल स्टूडियो के साथ दो संदर्भ दिखाए जाने के साथ कोई समस्या नहीं है।

<Choose> 
    <When Condition=" '$(Configuration)' == 'client1DeployClickOnce' "> 
    <ItemGroup> 
     <ProjectReferenceInclude="..\client1\app.Controls\app.Controls.csproj"> 
     <Project>{A7714633-66D7-4099-A255-5A911DB7BED8}</Project> 
     <Name>app.Controls %28Sources\client1\app.Controls%29</Name> 
     </ProjectReference> 
    </ItemGroup> 
    </When> 
    <Otherwise> 
    <ItemGroup> 
     <ProjectReference Include="..\app.Controls\app.Controls.csproj"> 
     <Project>{2E6D4065-E042-44B9-A569-FA1C36F1BDCE}</Project> 
     <Name>app.Controls %28Sources\app.Controls%29</Name> 
     </ProjectReference> 
    </ItemGroup> 
    </Otherwise> 
</Choose> 

तुम मेरे ब्लॉग पोस्ट पर इसके बारे में और अधिक पढ़ सकते हैं: ProjectReference with Condition in your MSBuild project file

+0

ग्रेट सॉल्यूशन लॉरेन, डुप्लिकेट संदर्भ परेशान थे और यह समाधान उस समस्या को हल करता है। धन्यवाद! –

+0

यह विजुअल स्टूडियो 2015 में मेरे लिए काम नहीं करता है –

5

हर MSBuild तत्व (ठीक लगभग हर) एक Condition इसके साथ जुड़े हो सकते हैं।

<ItemGroup Condition="'$(SqlServerTargetEdition)'=='2005'"> 
    <!-- SQL Server 2005 References here --> 
    <Reference Include="..."/> 
    </ItemGroup> 

और SQL के लिए एक और ItemGroup: क्या मेरा सुझाव है कि आप एक ItemGroup जो उदाहरण के लिए उस पर एक शर्त है में परियोजना फ़ाइल को संपादित (जो एक MSBuild ही फाइल) और जगह सभी एसक्यूएल सर्वर संदर्भ है सर्वर 2008:

<ItemGroup Condition="'$(SqlServerTargetEdition)'=='2008'"> 
    <!-- SQL Server 2008 References here --> 
    <Reference Include="..."/> 
    </ItemGroup> 

उन वस्तुओं को घोषित करने से पहले आपको संपत्ति SqlServerTargetEdition के लिए डिफ़ॉल्ट मान प्रदान करना चाहिए। फिर कमांड लाइन पर आप msbuild.exe का आह्वान करते समय/p स्विच का उपयोग करके उस मान को ओवरराइड कर सकते हैं।

सैयद इब्राहिम हाशिमी

मेरे पुस्तक: Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

+0

बहुत बढ़िया किताब! मेरे पास है और यह मेरी सैनिटी बचाई है! कहा, स्टैक ओवरफ़्लो पर आपको यहां देखने के लिए बहुत अच्छा लगा! – Cyberherbalist

+0

यह ठीक वैसे ही लगता है जो मैं बाद में हूं। मैं आज रात घर पर इसका परीक्षण करूंगा। धन्यवाद कहा! –