visual studio 2013 - मचान नियंत्रक दृश्य स्टूडियो 2013 अपडेट 2 के साथ काम नहीं करता है




visual-studio-2013 asp.net-mvc-5 (11)

मुसीबत:

मैंने विजुअल स्टूडियो 2013 अपडेट 2 में अपडेट किया है और अब मैं मचान नियंत्रक नहीं कर सकता।

समस्या प्रोजेक्ट विशिष्ट नहीं है: जब मैं नियंत्रक को मचान करने का प्रयास करता हूं, तो मुझे निम्न और किसी भी प्रोजेक्ट में निम्न त्रुटि मिलती है:

There was an error running the selected code generator:
'Exception has been thrown by the target of an invocation.'

यह विजुअल स्टूडियो 2013 अपडेट 2 को अपडेट करने से पहले काम कर रहा था।

इस मुद्दे को मौत के लिए गुमराह किया है, लेकिन विभिन्न सुझावों में से कोई भी काम नहीं करता है

उदाहरण के लिए:

  1. मेरे संदर्भ में ऑनमोडेल क्रिएटिंग पर टिप्पणी करना;

  2. MvcScaffolding, आदि जैसे संकुल को हटा रहा है (मैंने कोई भी इंस्टॉल नहीं किया है और यह किसी भी प्रोजेक्ट के साथ काम नहीं करता है);

मैंने कुछ टेम्पलेट्स को संशोधित / अनुकूलित किया है, लेकिन यह परिवर्तन के बाद काम कर रहा था।

संपादित करें:

मैंने विजुअल स्टूडियो 2013 अपडेट 2 को अनइंस्टॉल किया और इस प्रकार विजुअल स्टूडियो संस्करण 12.0.21005.1 आरईएल पर वापस लौटा।

समस्या गायब हो गई है। इसलिए, समस्या निश्चित रूप से अद्यतन 2 के साथ है।

सवाल:

क्या कोई (माइक्रोसॉफ्ट समेत) एक फिक्स के बारे में जानता है?

संपादित करें 2:

फारूक सुभानी का जवाब इस सवाल का समाधान नहीं करता है: प्रश्न स्पष्ट रूप से बताता है कि एमवीसीएसएफ़ोल्डिंग के संदर्भों को हटाने से इस मुद्दे को हल नहीं किया जाता है।

मैंने 200 प्वाइंट बक्षीस जोड़ा है, कृपया स्पष्ट रूप से बताए गए प्रश्न को संबोधित करें।


n मेरे मामले में, मैंने web.config में कनेक्शन स्ट्रिंग के साथ समस्या हल की।

मेरे पास समस्या है Previuos

  <connectionStrings configSource="Configs\ConnectionString.config"/>

और मुझे नहीं पता क्यों, लेकिन बनाम डेटाबेस से कनेक्ट नहीं हो सकता है और असफल हो सकता है।

परिवर्तन के बाद

<connectionStrings>
    <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
  </connectionStrings>

और यह काम करता है


अरे आप सभी के लिए काम नहीं करता है, असली जवाब यह है कि आपको किसी भी चीज को हटाने की ज़रूरत है जिसमें web.config पर configSource है और कनेक्शन स्ट्रिंग को रेखांकित करने की आवश्यकता है।

संपादित करें:

किसी ने इंगित किया कि इसे केवल <configSettings> , <appSettings> , और <connectionStrings> टैग्स को configSource विशेषता का उपयोग न करने की आवश्यकता है। और वह अभी भी अन्यथा configSource विशेषताओं का उपयोग करने में सक्षम था, जैसे कि पुनःलेखक टैग।

मुझे लगता है कि यह टूलिंग कनेक्शन स्ट्रिंग्स और एप्लिकेशन सेटिंग्स जैसे सामानों के लिए configSource स्थानों का पालन नहीं कर सकता है।

माइक्रोसॉफ्ट अभी तक तय नहीं होने पर इस मुद्दे पर होना चाहिए।

संपादित करें 2:

यहां तक ​​कि सोचा @awrigley ने अपने जवाब को सही के रूप में चिह्नित किया है, यह एक ज्ञात विजुअल स्टूडियो बग है। मैंने तब बताने में कामयाब रहा है और मुझे लगता है कि इसे जल्द ही कुछ ध्यान मिलेगा। https://github.com/aspnet/Tooling/issues/169#issuecomment-144197015


मुझे अद्यतन 4 में यही समस्या हो रही है। मैंने पाया कि समस्या <configSections></configSections> से कोई अनुभाग नाम परिभाषित नहीं हुआ है। टैग के बीच मैंने जो फिक्स डाला है वह निम्नानुसार है और सभी त्रुटियों को ठीक किया गया था:

<section name="entityFramework" 
         type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, 
               EntityFramework, Version=6.0.0.0, Culture=neutral, 
               PublicKeyToken=b77a5c561934e089" requirePermission="false" />

परियोजना बनाएं और सब कुछ काम करना चाहिए। चीयर्स!


मुझे लगता है, समस्या web.config फ़ाइल में खराब कॉन्फ़िगरेशन के कारण है।

मेरे मामले में मेरे पास web.config में एकाधिक <entityFramework> अनुभाग थे, और कॉन्फ़िगरेशन बदलने के बाद समस्या हल हो गई।


मेरे लिए यह सुनिश्चित करने के लिए क्या किया गया था कि <configSections> config <configSections> web.config फ़ाइल में <configSections> नोड <configuration> नोड के तुरंत बाद पहला नोड था।

प्रारंभ में, जब मैंने अपना connectionStrings configSections जोड़ा, तो मैंने वास्तव में इसे configSections से पहले रखा था, जिसने configSections टूल ब्रेक बनाया था।

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


मेरे लिए, मुझे यह सुनिश्चित करना था कि <configSettings> , <appSettings> , और <connectionStrings> टैग configSource का उपयोग नहीं कर रहे थे।

मैं अभी भी configSource विशेषताओं का उपयोग करने में सक्षम था, जहां configSource टैग।


मैं यहां अंग्रेजी में थोड़ा और समझाऊंगा, इसलिए कोई भी समझ सकता है। उम्मीद है कि यह किसी को वहां से बाहर करने में मदद करता है ऐसा इसलिए होता है क्योंकि विजुअल स्टूडियो डेटाबेस मॉडल से कनेक्ट करने में विफल रहता है।

ऐसा तब होता है जब आप कक्षा में नाम और / या पथ बदलते हैं जो DbContext को विस्तारित करता है और इसे Web.config फ़ाइल में नहीं बदलता है (आपकी प्रोजेक्ट के बाहरी भाग में: रूट)।

उदाहरण:

कल्पना करें कि आपने डीबीकॉन्टेक्स्ट कोड को मचान किया है:

ए) आपने अपनी परियोजना में एक फ़ोल्डर पर दायाँ क्लिक किया और "एडीओ.NET इकाई डेटा मॉडल" जोड़ा, और आपने इसे "मॉडल 1" नाम दिया

आपको निम्न कोड मिलता है:

  public class Model1 : DbContext
{
    // Your context has been configured to use a 'Model1' connection string from your application's 
    // configuration file (App.config or Web.config). By default, this connection string targets the 
    // 'Skelleton.Models.Model1' database on your LocalDb instance. 
    // 
    // If you wish to target a different database and/or database provider, modify the 'Model1' 
    // connection string in the application configuration file.
    public Model1()
        : base("name=Model1")
    {
    }

    // Add a DbSet for each entity type that you want to include in your model. For more information 
    // on configuring and using a Code First model, see http://go.microsoft.com/fwlink/?LinkId=390109.

    // public virtual DbSet<MyEntity> MyEntities { get; set; }
}

बी) अब, आपने तय किया है कि आपने जो नाम अभी लिखा है वह सादा बुरा है, इसलिए आप इसे AppContext में बदल देते हैं

आपका कोड अब इस तरह दिखता है:

  public class AppContext : DbContext
{
    // Your context has been configured to use a 'AppContext' connection string from your application's 
    // configuration file (App.config or Web.config). By default, this connection string targets the 
    // 'Skelleton.Models.AppContext' database on your LocalDb instance. 
    // 
    // If you wish to target a different database and/or database provider, modify the 'AppContext' 
    // connection string in the application configuration file.
    public AppContext()
        : base("name=AppContext")
    {
    }

    // Add a DbSet for each entity type that you want to include in your model. For more information 
    // on configuring and using a Code First model, see http://go.microsoft.com/fwlink/?LinkId=390109.

    // public virtual DbSet<MyEntity> MyEntities { get; set; }
}

फिर, आप दृश्यों के साथ सीआरयूडी (बनाएं, पढ़ें, अपडेट करें, हटाएं) संचालन को मचान करने का प्रयास करें और यह विफल हो जाता है!

ऐसा क्यों है?

अच्छा, अगर हम web.config फ़ाइल पर जाते हैं, तो हम निम्न स्ट्रिंग देख सकते हैं:

 <add name="Model1" connectionString="data source=(LocalDb)\v11.0;initial catalog=Skelleton.Models.Model1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

(यह पंक्ति आमतौर पर नीचे है <add name="DefaultConnection" )

और वहां समस्या है। आपके द्वारा दिए गए नाम के लिए आपको मॉडल 1 को बदलने की जरूरत है!

इस मामले में, इसे "मॉडल 1" के बजाय "AppContext" कहना चाहिए

और जहां यह कहता है:

initial catalog=Skelleton.Models.Model1;

सत्यापित करो कि:

  1. यह .cs फ़ाइल का नाम है जिसमें कक्षा है

  2. नामस्थान (या नामों की श्रृंखला (डॉट से अलग) जो आपकी कक्षा के नाम से पहले आती है) सही है। यह ध्यान रखना महत्वपूर्ण है कि आप ".cs" एक्सटेंशन को अंत में शामिल नहीं करते हैं; बस आपकी फाइल का नाम।

इसे ऐसा दिखना चाहिए:

क्योंकि मैंने कक्षा के नाम को आंतरिक और बाहरी दोनों (इसके अंदर और इसका फ़ाइल नाम) बदल दिया है, और इसके स्थान को नहीं बदला है, इसलिए मैं इसे AppContext में बदलता हूं

ऐसा करने के बाद। आप सामान्य रूप से मचान कर सकते हैं;)

उम्मीद है की यह मदद करेगा!


मैं वीएस 2013 अपडेट 4 पर हूं और बिल्कुल एक ही समस्या है। यह बाहरी फ़ाइल से web.config में कनेक्शन स्ट्रिंग को स्थानांतरित करते समय मेरे लिए काम करता है। तो मुझे लगता है कि आप यह सुनिश्चित करने का प्रयास कर सकते हैं कि कनेक्शन के लिए कॉन्फ़िगरेशन स्रोत विशेषता का उपयोग न करें जब मचान हो।

परिवर्तन से पहले और बाद में मेरा web.config पहले:

<connectionStrings configureSource="connectionStrings.config/>

बाद:

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net configSource="log4net.config" />
  <connectionStrings>
    <clear/>
    <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=YourDb;Integrated Security=False;User ID=sa;Password=YourPassword!#;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

मैंने प्रारंभकर्ता का उपयोग किया और जब myDbContext कंस्ट्रक्टर से प्रारंभकर्ता को हटा / टिप्पणी करें, मचान काम ठीक है

public myDbContext () : base("name=DefaultConnection")
    {

        //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DastanakDbContext>());
        //Database.Initialize(true);
    }

यह उन लोगों के लिए उपयोगी हो सकता है जिन्होंने अपने समाधान में किसी भी मचान नूजेट पैकेज को स्थापित नहीं किया है

वास्तव में मेरे पास mvcscaffolding या t4scaffolding स्थापित नहीं है और एक ही त्रुटि संदेश मिला है।

मेरे मामले में समस्या / बग कनेक्शन स्ट्रिंग को बदलकर हुई थी।

यहां पुन: पेश करने के लिए मेरे पास क्या / कदम थे।

  • स्थापित विजुअल स्टूडियो 2013 सामुदायिक संस्करण
  • बनाया गया एमवीसी परियोजना
  • कोड बनाया पहला मॉडल
  • वास्तविक सर्वर से कनेक्ट करने के लिए संपादित कनेक्शन स्ट्रिंग, इस तरह:

    <add name="DefaultConnection"
         connectionString="server=myserv;database=MyCustomerDB;user id=myuser;password=mypass" 
         providerName="System.Data.SqlClient" />
    

तब मैंने माइग्रेशन को न्यूजेट के माध्यम से सक्षम किया, इस तरह:

  • सक्षम करें-माइग्रेशन
  • एड-माइग्रेशन InitialCreate
  • डेटाबेस अद्यतन करें
  • मैंने वेबसाइट शुरू की और मैं एक उपयोगकर्ता को पंजीकृत कर सकता था। सभी टेबल सही ढंग से बनाए गए थे।

फिर मैंने मचान विकल्प का उपयोग कर एक नियंत्रक बनाया:

  • एंटीटी फ्रेमवर्क का उपयोग करके, "कंट्रोलर"> "जोड़ें"> कंट्रोलर ...> एमवीसी 5 कंट्रोलर पर राइट क्लिक करें> मेरे संदर्भ का चयन करें और इस्तेमाल होने वाली कक्षा का चयन करें। इसने काम कर दिया।

तब मैंने पहले कोड को और अधिक कोड करने का फैसला किया और स्क्रैच से शुरू किया:

  • स्थानीय डीबी का उपयोग करने के लिए मैंने कनेक्शन स्ट्रिंग को निम्नानुसार बदल दिया:

    <add name="DefaultConnection" 
         connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-Test-20141126094523.mdf;Initial Catalog=aspnet-Test-20141126094523;Integrated Security=True"
         providerName="System.Data.SqlClient" />
    

तब मैं चला गया:

  • माइग्रेशन फ़ोल्डर हटा दिया
  • nuget कंसोल में उपरोक्त के समान आदेशों का उपयोग करके माइग्रेशन को फिर से सक्षम किया गया
  • वेबसाइट शुरू किया और एक उपयोगकर्ता पंजीकृत किया
  • एमडीएफ डीबी की जांच की। सभी टेबल वहां हैं, इसलिए कनेक्शन स्ट्रिंग काम करता है।
  • एंटीटी फ्रेमवर्क का उपयोग करके "कंट्रोलर"> "जोड़ें"> कंट्रोलर ...> एमवीसी 5 कंट्रोलर पर राइट क्लिक करें। मेरे संदर्भ और एक वर्ग का इस्तेमाल किया जाना चुना। यह काम नहीं किया और यह पॉपअप त्रुटि प्रकट हुई:

चयनित कोड जेनरेटर चलाने में त्रुटि हुई: 'अपवाद के लक्ष्य से अपवाद फेंक दिया गया है।'

उपाय:

कुछ जांच के बाद, मैंने जो किया, वह web.config में कनेक्शन स्ट्रिंग को "असली सर्वर" (स्थानीय डीबी के बजाय) में प्रारंभिक में बदल रहा है। मैंने विचारों के साथ नियंत्रक उत्पन्न करने के लिए फिर कोशिश की। इसने काम कर दिया!

तो यह मुझे एक कनेक्शन स्ट्रिंग समस्या / बग या एक स्थानीय डीबी समस्या लगता है ... इसे समझा नहीं सकता है। हो सकता है कि विजुअल स्टूडियो मुझे पसंद न करे, मुझे अपना पुराना कनेक्शन स्ट्रिंग रखना पड़ा ...

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


पैकेज प्रबंधक कंसोल में निम्न आदेश चलाएं:

Uninstall-Package EntityFramework -Force

Install-Package EntityFramework

Uninstall-Package  MvcScaffolding

Install-Package MvcScaffolding




asp.net-mvc-scaffolding