2008-11-10 15 views
13

विजुअल स्टूडियो वेबसाइट प्रोजेक्ट्स में (विजुअल स्टूडियो 2005 या बाद में, वेब एप्लिकेशन प्रोजेक्ट्स नहीं जहां एक .csproj फ़ाइल है) संदर्भ जानकारी कैसे संग्रहीत की जाती है, और क्या इसे बिना स्रोत नियंत्रण के संभव है स्रोत नियंत्रण में संकलित बाइनरी भंडारण?विजुअल स्टूडियो वेबसाइट संदर्भ पथ

यदि आप किसी वेबसाइट प्रोजेक्ट पर राइट-क्लिक करते हैं और प्रॉपर्टी पेज का चयन करते हैं, तो पहली स्क्रीन (संदर्भ) सभी प्रोजेक्ट संदर्भों को सूचीबद्ध करती है।

सिस्टम। * संदर्भ जीएसी के रूप में सूचीबद्ध हैं, और अन्य डीएलएल फ़ाइलों को बीआईएन या परियोजना के रूप में सूचीबद्ध किया जा सकता है।

समस्या तब होती है जब आप एक परियोजना संदर्भ के रूप में कुछ में शामिल हैं, और उसके बाद स्रोत नियंत्रण करने के लिए यह वादा (हमारे लिए, सबवर्सन, अनदेखी .dll और .pdb फ़ाइलें।)

एक और डेवलपर रिपोजिटरी से अपडेट किए गए कोड हो जाता है और इन सभी प्रोजेक्ट संदर्भों को मैन्युअल रूप से सेट अप करना है, लेकिन मैं यह भी निर्धारित नहीं कर सकता कि यह जानकारी कहां संग्रहीत की जाती है, जब तक कि वह उसमें नहीं है। एसयूओ, जो स्रोत-नियंत्रण अनुकूल नहीं है।

उत्तर

18

यदि आप ब्राउज़ टैब के माध्यम से फ़ाइल नाम से .dll का संदर्भ देते हैं, तो एक .refresh फ़ाइल बनाई जानी चाहिए (बीआईएन में डीएल के तहत घोंसला)। हमने उन्हें एसवीएन में रखा है और यह बहुत अच्छा काम करता है (आपको सापेक्ष पथों का उपयोग करने के लिए उन्हें संपादित करना पड़ सकता है)।

संदर्भ नेट टैब से जोड़ा web.config को

परियोजना संदर्भ समाधान (.sln) फ़ाइल में जमा हो जाती जुड़ जाते हैं। .sln फ़ाइल को खोलने और आप उन्हें लिखा दिखाई देगा:

Project("{xxxxxxx-7377-xxxx-xxxx-BC803B73C61A}") = "XXXXXXX.Web", "XXXXXXX.Web", "{xxxxxxxx-BB14-xxxx-B3B6-8BF6D8BC5AFF}" 
    ProjectSection(WebsiteProperties) = preProject 
     TargetFramework = "3.5" 
     ProjectReferences = "{xxxxxxxx-C3AB-xxxx-BBED-2055287036E5}|XXXXXX.Data.dll; 
      ... 
+0

धन्यवाद आदमी! मुझे हमेशा परियोजना संदर्भों में कोई समस्या थी और मैंने नोटिस नहीं किया कि जब मैं प्रोजेक्ट संदर्भ जोड़ता हूं तो स्लान फ़ाइल बदल रही है। –

0

मैं copyprojectDll.ps1 powershell का उपयोग करें।

मेरे फ़ोल्डर संरचना/नीचे

  • ClassLibraries
    Thirdparty
    वेबसाइट है बिन
    CopyprojectDll.ps1
    Website.sln

ClassLibraries अपने प्रोजेक्ट, दाल के लिए कोड वर्ग हैं। वेबसाइट प्रोजेक्ट में केवल वेब फ़ाइलें, एएसपीएक्स, एएसपीएक्स सीएस शामिल हैं .. Thirdparty, पुस्तकालयों के लिए आवश्यक हैं AjaxToolkit आदि

मैं ClassLibraries.sln संकलन मैं CopyprojectDll.ps1 चलाने मैं इस के बाद Website.sln का उपयोग करें।

नमूना पावरहेल फ़ाइल नीचे है।

$ फ़ोल्डर्स = @(); $ फ़ोल्डरों + = "IB.Security" $ फ़ोल्डरों + = "ClassLibraries/Core.Classes"

समारोह CopyDllsToWebBin ($ dll_files) { अगर ($ dll_files -eq $ नल) { वापसी; } $ targetfolder = "।/ Kod/bin/"

foreach($dll in $dll_files) 
{ 

    copy-item $dll.FullName -destination "$targetfolder" -force #-Verbose 
} 

}

समारोह CopyDllsToThirdParty ($ dll_files) {

$ TargetFolder =" ./ThirdParty/ "

foreach($dll in $dll_files) 
{ 
    copy-item $dll.FullName -destination "$targetfolder" -force #-Verbose 
} 

}

$ dll_output_folder = "/ bin/डिबग";

+०१२३५१६४१०६

foreach ($ फ़ोल्डर्स में $ फ़ोल्डर) { $ dll_files = Get-ChildItem -Path $ फ़ोल्डर $ dll_output_folder- शामिल करें * .dll -Recurse | तरह-वस्तु का नाम CopyDllsToWebBin ($ dll_files) $ dll_files = प्राप्त करें-ChildItem -Path $ फ़ोल्डर $ dll_output_folder -include * .pdb -Recurse | तरह-वस्तु का नाम CopyDllsToWebBin ($ dll_files) $ dll_files = प्राप्त करें-ChildItem -Path $ फ़ोल्डर $ dll_output_folder -include * .xml -Recurse | तरह-वस्तु का नाम CopyDllsToWebBin ($ dll_files) "कॉपी किया गया $ फ़ोल्डर $ dll_output_folder"

}

$ dll_files = प्राप्त करें-ChildItem -Path "Thirdparty" -include * .dll -Recurse | तरह-वस्तु का नाम CopyDllsToWebBin ($ dll_files) $ dll_files = प्राप्त करें-ChildItem -Path "Thirdparty" -include * .pdb -Recurse | तरह-वस्तु का नाम CopyDllsToWebBin ($ dll_files) $ dll_files = प्राप्त करें-ChildItem -Path $ फ़ोल्डर $ dll_output_folder -include * .xml -Recurse | तरह-वस्तु का नाम CopyDllsToWebBin ($ dll_files)

"नकल Thirdparty"

तारीख

16

"वेब साइट" दृश्य स्टूडियो में परियोजनाओं एक अजीब बात कर रहे हैं। वे पारंपरिक वेब डेवलपर्स, जहां एक "साइट" एक निर्देशिका में फ़ाइलों का सिर्फ एक सेट है को पूरा करने के प्रयास होने लगते हैं। वैसे ही, जब आप विजुअल स्टूडियो में "वेब साइट" प्रोजेक्ट करते हैं, तो कोई असली "प्रोजेक्ट" फ़ाइल नहीं होती है, जैसे सी # प्रोजेक्ट्स में .csproj फ़ाइल होती है। हालांकि, अभी भी एक समाधान फ़ाइल (.sln) है। आम तौर पर, असेंबली। डीएल संदर्भ परियोजना फ़ाइल में सहेजे जाते हैं। चूंकि किसी वेब साइट में कोई नहीं है, तो वे कहां जाते हैं?

अन्य परियोजनाओं

आप एक अन्य परियोजना के लिए एक संदर्भ जोड़ देते हैं तो के सन्दर्भ, तो एक प्रवेश समाधान .sln फ़ाइल में किया जाता है। यह समाप्त होता है इस तरह लग रही:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}" 
ProjectSection(WebsiteProperties) = preProject 
TargetFramework = "3.5" 
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;" 

फ़ाइल सिस्टम का संदर्भ

आप फाइल सिस्टम ब्राउज़ करें और एक .dll फ़ाइल जोड़ते हैं, तो दृश्य स्टूडियो का निर्माण करेगा एक ही साथ फ़ाइल ".refresh" अगर \ Bin फ़ोल्डर में नाम। यह फ़ाइल केवल एक 1-पंक्ति पाठ फ़ाइल है जो उस पथ को इंगित करती है जिस से फ़ाइल लोड की गई थी। तो उदाहरण के लिए यदि मैंने .... \ libs से "MyAssem.dll" जोड़ा, तो वेब साइट \ Bin फ़ोल्डर में, मैं वहां कॉपी की गई 2 फाइलों के साथ समाप्त हो जाऊंगा: MyAssem.dll और MyAssem.dll.refresh। .refresh फ़ाइल में टेक्स्ट होगा: ".... \ libs"। प्रत्येक बिल्ड पर, विजुअल स्टूडियो .refresh फ़ाइल में पथ की जांच करेगा, और यदि कोई नया। डीएल मौजूद है, तो यह बिन निर्देशिका में से एक को ओवरराइट करेगा।

चेतावनी: अगर फ़ाइल मौजूद नहीं है, तो Visual Studio एक त्रुटि नहीं फेंक देगा जहां .refresh फ़ाइल इसे देखने के लिए कहती है। यह पहले से ही \ bin फ़ोल्डर में .dll का उपयोग करना जारी रखेगा। हालांकि यह एक चेतावनी आउटपुट होगा।

GAC संदर्भ

आप वैश्विक विधानसभा कैश से एक विधानसभा जोड़ते हैं, तो दृश्य स्टूडियो, Web.config फ़ाइल में यह प्रवेश करेंगे इस तरह:

<compilation debug="false"> 
<assemblies> 
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 

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

मुझे आशा है कि यह विषमताएं वेब साइट्स और संदर्भों के संदर्भों को स्पष्ट करने में मदद करता है!

+0

विषय के बारे में बहुत उपयोगी ब्लॉग पोस्ट। धन्यवाद। –

+0

दुर्भाग्य से यह लिंक अब सक्रिय नहीं प्रतीत होता है। – lgaud

+0

@lgaud: ओह क्षमा करें, मैंने अभी अपनी होस्टिंग को निष्क्रिय कर दिया है कि यह आज सुबह पोस्ट किया गया था। मैंने इसे कहीं भी कॉपी किया है ... अगर मैं इसे पा सकूं, तो मैं एक लिंक के बजाय पूर्ण उत्तर के साथ अपना उत्तर अपडेट कर दूंगा। – CodingWithSpike

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