2013-02-08 56 views
11

को तैनाती मैं एक WPF अनुप्रयोग है कि मैं ClickOnce के माध्यम से हमारे उपयोगकर्ताओं के लिए तैनात करने के लिए चाहते हैं। हमारे पास चार वातावरण, सिस्टम परीक्षण, उपयोगकर्ता परीक्षण, समांतर उत्पादन और उत्पादन है। प्रत्येक को सर्वर नामों और पर्यावरण के लिए विशिष्ट अन्य चीजों के साथ एक अलग कॉन्फ़िगरेशन फ़ाइल की आवश्यकता होती है ताकि वे सभी एक ही कोड बेस का उपयोग न कर सकें। अधिकांश कोड समान हैं लेकिन अंतिम पैकेज अलग-अलग .config फ़ाइलों की वजह से थोड़ा अलग होगा।ClickOnce कई वातावरण

मुझे जो मिल रहा है वह यह है कि हम उपयोगकर्ता परीक्षण में एक संस्करण स्थापित करते हैं, संस्करण 05 कहें, फिर वे परीक्षण करते हैं, और फिर जब उन्हें अगला संस्करण देने का समय आता है, तो हमें केवल एक अद्यतन पैकेज डालना चाहिए उपयोगकर्ता परीक्षण वेब सर्वर पर, फिर वे तैनाती यूआरएल पर क्लिक करके अपने संस्करण को अपडेट कर सकते हैं। लेकिन जब वे ऐसा करते हैं तो यह कहता है "उसी पहचान के साथ आवेदन पहले से मौजूद है" और हमें संस्करण 06 को स्थापित करने के लिए नियंत्रण कक्ष के माध्यम से अनइंस्टॉल करना होगा। यह गलत लगता है और क्लिकऑन का मुद्दा नहीं है।

आप कैसे सुझाव देंगे कि मैं इस एप्लिकेशन को चार अलग-अलग वातावरणों में बना और तैनात करता हूं ताकि प्रत्येक वातावरण में हमारे पास सर्वर पर एक नया संस्करण डालने की क्षमता हो और उपयोगकर्ता उस वातावरण से परीक्षण या इसका उपयोग कर सकें अद्यतन के नीचे और कुछ भी अनइंस्टॉल करने की आवश्यकता नहीं है?

उत्तर

2

सबसे पहले, आप एक पहले की स्थापना रद्द करने के बिना दो अलग-अलग URL से एक ही तैनाती नाम के साथ एक आवेदन स्थापित नहीं कर सकता। यह सुनिश्चित करने के लिए क्लिकऑन सुरक्षा के लिए इसका उपयोग करता है कि कोई आपकी तैनाती को हाइजैक करने का प्रयास नहीं करता है।

दूसरा, अलग करना, बनाता है आप परियोजना, प्रत्येक नाम के साथ एक के तहत चार फ़ोल्डर सेट कर सकते हैं। फिर चार बिल्ड कॉन्फ़िगरेशन सेट करें (उन्हें एक ही चीज़ कहें)। फिर एक पोस्ट-बिल्ड कमांड सेट करें जो फ़ाइलों को \ bin फ़ोल्डर में कॉपी करता है। यदि आप फ़ोल्डर नामों को उनमें निर्माण कॉन्फ़िगरेशन सेट अप करने के लिए सेट अप करते हैं, तो यह उस कॉन्फ़िगरेशन के साथ जो भी हो, कॉपी करेगा।

COPY/Y "$(TargetDir)myfile_$(ConfigurationName)\*.*" "$(TargetDir)" 

तीसरा, आप इस परियोजना का तो वे तैनाती में शामिल किया जाना चिह्नित किया जाएगा में फ़ाइलों को शामिल करने के लिए है, भले ही आप उन्हें एक प्रति कमांड के साथ प्रतिस्थापित कर रहे हैं के बाद निर्माण किया जाता है। और चार निर्देशिकाओं को भी शामिल किया जाना चाहिए, भले ही उनका उपयोग नहीं किया जाता है।

+0

मुझे यकीन है कि यह जब प्रकाशित प्रकट अभी भी जिक्र किया जाएगा काम करेंगे नहीं कर रहा हूँ: संपत्ति समूह इस (उन्हें पहले संपत्ति समूह कि डिफ़ॉल्ट ClickOnce सेटिंग्स को परिभाषित करता है के बाद डाल) की तरह लग रहे मूल सर्वर के लिए? और आप मैनिफेस्ट फ़ाइल को हाथ से संपादित नहीं कर सकते क्योंकि यह हस्ताक्षरित नहीं है? – MickyD

0

मैं कोई भाग्य के साथ पिछले दो दिनों में भी ऐसा ही करने की कोशिश कर रहा है। मेरे वर्तमान विधि करता है निम्नलिखित:

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\systest.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="System Test Product";InstallUrl="http://systest.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish systest.app.publish 

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\usertest.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="User Test Product";InstallUrl="http://usertest.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish usertest.app.publish 

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\parallelprod.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="Parallel Prod Product";InstallUrl="http://parallelprod.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish parallelprod.app.publish 

msbuild /t:clean /p:Configuration=Release;PlatformTarget=x86 "C:\Product\Product.csproj 
del c:\Product\app.config 
ren C:\Product\prod.config C:\Product\app.config 
msbuild /t:publish /p:Configuration=Release;PlatformTarget=x86;UpdateEnabled=true;UpdateMode=Foreground;UpdatePeriodically=false;MinimumRequiredVersion=2013.2.1086.5496;ApplicationVersion=2013.2.1086.5496;UpdateRequired=true;ProductName="Prod Product";InstallUrl="http://prod.product.temp-uri.org/install/" 
ren C:\Product\bin\Release\app.publish prod.app.publish 

पहले बाधा मैं साकार किया गया था कि आप आवेदन आप कॉन्फ़िग फ़ाइल, संस्करण या उत्पाद का नाम बदलना चाहते हैं पुन: संयोजित करना होगा मारा। एक नियमित निर्माण के बाद बस एक प्रकाशन चलाना इस कार्य को पूरा नहीं करेगा। इस बिंदु पर मुझे लगा कि यह काम करेगा क्योंकि प्रत्येक के पास एक अलग इंस्टॉल यूआरएल है और एप्लिकेशन मेनिफेस्ट में एक अलग उत्पाद नाम है, हालांकि वे अभी भी उसी संदेश से विवाद कर रहे हैं जो आप देख रहे हैं। अगर मैं इसे काम कर रहा हूं तो मैं वापस आऊंगा और इसे ठीक से अपडेट करूँगा।

11

कुछ समय के लिए अपने आप को एक समाधान के लिए तलाश कर दिया गया बीत रहा है, यह मुझे मारा है कि अंतिम एक मैं के साथ आया था वास्तव में इस के रूप में सरल है:

  • Slow Cheetah चयनित निर्माण के आधार पर config फ़ाइलें बदलने के लिए विन्यास (जैसे डीबग/रिलीज)
  • साथ विन्यास बिल्ड प्रति एक संपत्ति समूह विशिष्ट क्लिक के एक बार परियोजना गुण (जैसे उत्पाद का नाम और AssemblyName (परीक्षण और उत्पादन संस्करण की समानांतर स्थापना के लिए), InstallUrl) परियोजना फ़ाइल में।
  • अतिरिक्त गुणों को निर्दिष्ट करना MSBuild के माध्यम से (ApplicationVersion, MinimumRequiredVersion की तरह) जब/लक्ष्य को क्रियान्वित: प्रकाशित

किसी भी config फ़ाइलों को मैन्युअल रूप से धीमी गति से चीता इस संभाल लेंगे कॉपी करने के लिए कोई जरूरत नहीं है। एक बार पैकेज को संबंधित बिल्ड कॉन्फ़िगरेशन के आउटपुट फ़ोल्डर (जैसे बिन/डीबग या आपके पास जो भी हो) में बनाया जाएगा।

सबसे बड़ा लाभ यह है कि निर्माण दृश्य स्टूडियो का उपयोग कर के लिए एक ही है या स्वचालित MSBuild का उपयोग कर (कुछ अतिरिक्त गुणों जो पूरी तरह से वैकल्पिक हैं को छोड़कर) बनाता है। आपके निर्माण में अतिरिक्त वातावरण जोड़ने के लिए आपको बस इतना करना है कि नई बिल्ड कॉन्फ़िगरेशन और संबंधित धीमी चीता ट्रांसफॉर्मेशन और प्रोजेक्ट फ़ाइल में एक प्रॉपर्टी ग्रुप बनाना है।

पूरा सेटअप कम से कम .NET 3.5 (पहले संस्करणों के बारे में बात नहीं कर सकता) के साथ काम कर रहा है।

शायद यह किसी की भी मदद करता है। विवरण के लिए पूछने के लिए स्वतंत्र महसूस करें।

पुनश्च:

<PropertyGroup Condition=" '$(Configuration)' == 'Demo' "> 
    <AssemblyName>Com.MyApplication.Main.Demo</AssemblyName> 
    <InstallUrl>http://demoserver/myapp/</InstallUrl> 
    <ProductName>My Application %28Demo%29</ProductName> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)' == 'Test' "> 
    <AssemblyName>Com.MyApplication.Main.Test</AssemblyName> 
    <InstallUrl>http://testserver/myapp/</InstallUrl> 
    <ProductName>My Application %28Test%29</ProductName> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)' == 'Prod' "> 
    <AssemblyName>Com.MyApplication.Main</AssemblyName> 
    <InstallUrl>http://prodserver/myapp/</InstallUrl> 
    <ProductName>My Application</ProductName> 
    </PropertyGroup> 
+3

जब भी आप बिल्ड कॉन्फ़िगरेशन को बदलते हैं, तो आप VisualUl को UpdateUrl, UpdateURl, और ProductName गुणों को लिखने से कैसे रोकते हैं? – MyItchyChin

+2

@MyItchyChin ठीक है, वास्तव में मैं नहीं करता। जब तक आप विजुअल स्टूडियो में प्रोजेक्ट प्रॉपर्टी पेज नहीं खोलते तब तक संपत्ति समूहों को बदला नहीं जाना चाहिए। इसके अतिरिक्त, स्रोत नियंत्रण सुनिश्चित करता है कि कम से कम आप नोटिस करते हैं और कुछ गलत होने पर वापस करने का मौका मिलता है। Mage का उपयोग करने से अभी भी बहुत बेहतर है ... –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^