2010-07-09 16 views
13

मेरी कंपनी हमारी वेब साइटों में हमारे स्ट्रिंग संसाधनों को संभालने के लिए कुछ डेटाबेस टेबल, एक वेब पेज फ्रंट एंड और "निर्यात" एप्लिकेशन के संयोजन का उपयोग करती है।क्या मुझे resx Designer.cs फ़ाइल की आवश्यकता है?

जब हम वीएस -2008 का उपयोग करते थे तो निर्यात आवेदन ठीक काम करने के लिए प्रयुक्त होता था, लेकिन वीएस -2010 में स्विच करने के बाद संसाधनों में अब समाधान खोजकर्ता में "नीचे" एक डिजाइनर.cs फ़ाइल है।

समस्या यह है कि "निर्यात" एप्लिकेशन केवल .resx फ़ाइलों को उत्पन्न करता है, न कि अंतर्निहित designer.cs फ़ाइलें।

तो, वहाँ एक रास्ता उन designer.cs फ़ाइलें नहीं करने के लिए, या वैकल्पिक रूप किसी तरह अपने आप स्वत: उत्पन्न करने के लिए है (या यहां तक ​​कि कुछ आदेश निर्यात आवेदन करने के लिए कह सकते हैं उन्हें फिर से उत्पन्न)

उत्तर

7

MSDN से हमने:

Compiling Resources into Assemblies

जब आप अपने आवेदन का निर्माण, विजुअल स्टूडियो अपने आवेदन रेस कन्वर्ट करने के लिए resgen.exe उपकरण का आह्वान आंतरिक कक्षा में संसाधन कहा जाता है। यह वर्ग संसाधनों में निहित है। डिज़ाइनर सीएस फ़ाइल जो संसाधन 0res35 फ़ाइल के तहत घूर्णन है एक्सप्लोरर में। संसाधन वर्ग आपके सभी प्रोजेक्ट संसाधनों को स्थैतिक रूप से गुणों को रन-टाइम पर दृढ़ता से टाइप किए गए संसाधन प्रदान करने के तरीके के रूप में प्राप्त करता है। जब आप के माध्यम से विजुअल C# आईडीई का निर्माण, सभी समझाया संसाधन दोनों संसाधनों कि .resx फ़ाइल और लिंक की गई फ़ाइलों में एम्बेड किए गए थे, सहित डेटा, सीधे आवेदन विधानसभा (.exe में संकलित किया गया है या। डीएल फाइल)। अन्य शब्दों में, विज़ुअल सी # आईडीई हमेशा /संसाधन कंपाइलर विकल्प का उपयोग करता है। यदि आप कमांड लाइन से बनाते हैं, तो आप /linkresource कंपाइलर विकल्प निर्दिष्ट कर सकते हैं जो आपको संसाधनों को मुख्य एप्लिकेशन असेंबली से अलग फ़ाइल में तैनात करने में सक्षम करेगा। यह उन्नत परिदृश्य है और कुछ दुर्लभ स्थितियों में केवल आवश्यक है।

+1

धन्यवाद, कभी-कभी यह सिर्फ यह जानना है कि क्या खोजना है :) मैं सोमवार सुबह उसमें देख लूंगा। –

+1

शानदार, अगर मैंने .resx फ़ाइल के समान फ़ोल्डर में .designer.cs फ़ाइल (> 0 बाइट्स) भी थी, तो मैंने resgen टूल को चलाने के लिए बस अपना निर्यात ऐप बदल दिया। (मैं सोमवार तक इंतजार नहीं कर सका, जिज्ञासा मेरे लिए बेहतर हो गई) –

+0

हम्म, यह काफी सही ढंग से काम नहीं कर सका। यह सिर्फ ठीक है लेकिन जब मैंने इसे चलाया तो एप्लिकेशन क्रैश हो गया। इसलिए, मैंने एक अलग दृष्टिकोण की कोशिश की है जो लगभग काम करता है। मैंने एक नया सवाल शुरू कर दिया है, क्योंकि यह थोड़ा अलग समस्या है। http://stackoverflow.com/questions/3230585/run-custom-tool-for-resx-files-in-mvc2-project-from-an-external-plication-sc –

11

मुझे एक समस्या थी जहां वीएस 2010 Designer.cs फ़ाइलों को पुन: उत्पन्न नहीं करेगा, और समाधान कहीं और नहीं मिला।

मैं कमांड लाइन पर जाने के बावजूद उन्हें पुन: उत्पन्न करने में सक्षम था।

दृश्य स्टूडियो 2010 में इस मुद्दे को ठीक करने के लिए मैंने किया था निम्नलिखित:

  1. हटाए गए Designer.cs फ़ाइल
  2. राइट मुख्य resx फ़ाइल
  3. करें पर क्लिक किया Run Custom Tool

उसने Designer.cs फ़ाइल का पुनर्निर्माण किया।

आशा .. है कि भविष्य में किसी और मदद कर सकता है

+1

बेशक, कस्टम टूल प्रॉपर्टी resx फ़ाइल में 'PublicResXFileCodeGenerator' जैसे कुछ होना चाहिए (और जैसे ही आप उस फ़ील्ड को संपादित करते हैं, डिज़ाइनर फ़ाइल स्वचालित रूप से जेनरेट हो जाती है) – ekkis

+0

हम अपने भाषा सर्वर से resx फ़ाइलों को सिंक्रनाइज़ करने के लिए एक कस्टम टूल का उपयोग करते हैं। यह टिप संबंधित कोड-बैक फ़ाइल के पुनर्निर्माण के लिए वीएस प्राप्त करने के लिए बहुत अच्छी है! –

1

आप जब परियोजना के निर्माण के लिए स्वचालित रूप से * .resx फ़ाइलों से * .designer.cs फ़ाइलें उत्पन्न करने के लिए पसंद करते हैं, निम्नलिखित दृष्टिकोण हमें और इसके लिए काम किया साथ ही आप के लिए काम कर सकते हैं:

  1. एक एक्सएमएल फ़ाइल परियोजना है जिसमें आप स्वचालित रूप से डिजाइनर फ़ाइलें उत्पन्न करना चाहते हैं फ़ाइल के रूप में अपने समाधान
  2. ओपन बंद करें। ध्यान दें कि आपको इसे एक XML फ़ाइल के रूप में लोड करने की आवश्यकता है। आप प्रोजेक्ट प्रॉपर्टी पेज के माध्यम से इन सेटिंग्स को संपादित नहीं कर सकते हैं।
  3. परियोजना के लिए एक लक्ष्य जोड़ें इस प्रकार है:
 
<Target Name="GenerateDesignerFiles"> 
    <Message Text="Deleting old Designer Files..."/> 
    <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).resources')"/> 
    <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"/> 
    <Message Text="Generating Designer Files..."/> 
    <GenerateResource 
     Sources="@(EmbeddedResource)" 
     StronglyTypedLanguage="C#" 
     StronglyTypedClassName="%(Filename)" 
     StronglyTypedNamespace="@(EmbeddedResource->'%(CustomToolNamespace)')" 
     StronglyTypedFileName="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')" 
     PublicClass="true" 
     > 
    </GenerateResource> 
    <Message Text="Generating Designer Files complete."/> 
</Target> 
  1. "BeforeBuild" नाम लक्ष्य का पता लगाएँ। इस लक्ष्य पर टिप्पणी की जा सकती है (डिफ़ॉल्ट)।
  2. "BeforeBuild" लक्ष्य को संशोधित इस प्रकार है:
 
<Target Name="BeforeBuild"> 
    <CallTarget Targets="GenerateDesignerFiles"/> 
</Target> 

यह समाधान सभी संसाधन फ़ाइलों पर आधारित है के रूप में "EmbeddedResource" सूचीबद्ध किया जा रहा प्रोजेक्ट फाइल के ItemGroup, उदा भीतर

 
<ItemGroup> 
    <EmbeddedResource Include="Resources\Creditor\Display_Creditor.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>Display_Creditor.Designer.cs</LastGenOutput> 
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> 
    </EmbeddedResource> 
    <EmbeddedResource Include="Resources\InboundEmail\Tooltip_InboundEmailDetails.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>Tooltip_InboundEmailDetails.Designer.cs</LastGenOutput> 
    <CustomToolNamespace>Acme.Web.Resources.InboundEmail</CustomToolNamespace> 
    </EmbeddedResource> 
    <EmbeddedResource Include="Resources\Creditor\Tooltip_CreditorDetails.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>Tooltip_CreditorDetails.Designer.cs</LastGenOutput> 
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> 
    </EmbeddedResource> 
</ItemGroup> 

अस्वीकरण: यह विजुअल स्टूडियो 2013 और सी # परियोजनाओं के साथ परीक्षण किया गया है। यह अन्य परियोजनाओं और/या विजुअल स्टूडियो के अन्य संस्करणों के लिए काम नहीं कर सकता है या नहीं।

+0

यह वीएस2015 के साथ काम करता है।थोड़ी सी टिप्पणी हालांकि: मुझे 'कस्टमटूल नामस्थान' प्रदान करना था, अन्यथा यह '.cs' फ़ाइल को बराबर '.cs' फ़ाइल उत्पन्न करेगा। – Caramiriel

0

इस प्रयास करें: कॉपी हमेशा

  • कस्टम उपकरण: PublicResXFileCodeGenerator
  • कॉपी उत्पादन निर्देशिका के लिए:

    • सही
    • सेट गुण गुणों पर
    • क्लिक करें resx फ़ाइल पर क्लिक करें

    सहेजें और फिर से बनाएं। समस्या हल हो गई।

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