2012-08-03 16 views
11

मैं काम करने के लिए ईएफ Migrate.exe निष्पादित करने पर संघर्ष कर रहा हूं।काम करने के लिए Migrate.exe प्राप्त करना

मेरे समाधान में कुछ परियोजनाएं हैं। माइग्रेशन और संस्थाएं परियोजना डेटा में रहती हैं। नियंत्रक और विचार वेब में रहते हैं।

मैंने माइग्रेट.एक्सई का उपयोग करने की कोशिश की - हालांकि मैं पहले तर्क (असेंबली) को स्वीकार करने के लिए संघर्ष कर रहा हूं। दस्तावेज कहता है:

असेंबली: माइग्रेशन कॉन्फ़िगरेशन प्रकार वाले असेंबली का नाम निर्दिष्ट करता है।

मैं कोशिश की है:

migrate.exe "MySolution \ DataProject \ बिन \ डीबग \ Data.dll"

ERROR: Could not load file or assembly 'D:\\MySolution\\Data\\bin\\Debug\\Data' or one of its dep 
endencies. The given assembly name or codebase was invalid. (Exception from HRES 
ULT: 0x80131047) 

किसी भी विचार क्या गलत हो रहा है?

+0

मैं एक ही समस्या है, तो आप पता लगाना क्या गलत हो रहा मुझे पता है की है। – Zasz

उत्तर

31

this, this, और this

पढ़ने के बाद मैं है (मुझे लगता है कि) तुम क्या जरूरत है:

  1. आप एक .NET 4 विधानसभा के खिलाफ migrate.exe का उपयोग करते हैं आप रीडायरेक्ट नाम बदलने की आवश्यकता .config संकुल \ EntityFramework.5.0.0 \ tools में migrate.exe.config में उपलब्ध है और इसे mraterate.exe के समान निर्देशिका में कॉपी करें। .NET 4.5 असेंबली के विरुद्ध migrate.exe चलाने के लिए आपको इस प्रति की आवश्यकता नहीं है, migrate.exe.config मौजूद नहीं होना चाहिए।
  2. इकाई ढांचे का सही संस्करण DLL समान निर्देशिका में migrate.exe के रूप में होना चाहिए। एक .NET 4 असेंबली के खिलाफ migrate.exe चलाने के लिए सही संस्करण संकुल \ EntityFramework.5.0.0 \ lib \ net40 \ है। एक सही .NET 4.5 असेंबली
  3. के विरुद्ध migrate.exe चलाने के लिए सही संस्करण संकुल \ EntityFramework.5.0.0 \ lib \ net45 \ है। यदि आप/StartUpDirectory =/असेंबली उदाहरण के लिए पथ निर्दिष्ट नहीं करते हैं: C:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\
  4. यदि आप स्टार्टअप निर्देशिका निर्दिष्ट नहीं करते हैं, तो आपको/असेंबली उदाहरण में पूर्ण पथ निर्दिष्ट करने की आवश्यकता है: C:\Tools\migrate.exe C:\Project\bin\some.dll - इस परिदृश्य में migrate.exe कुछ.dll की निर्भरताओं को लोड करने में सक्षम नहीं होगा, जब तक आप डाल नहीं देते सभी some.dll की निर्भरताओं और इसे उसी निर्देशिका में migrate.exe के रूप में डालें।
  5. आप अपने some.dll रूप में एक ही रास्ते में migrate.exe डाल, तो migrate.exe ही EntityFramework.dll जो आपके ऐप्लिकेशन का उपयोग करता है का उपयोग करने में सक्षम हो जाएगा, और सभी निर्भरता लोड कर सकते हैं, और कुछ लोड कर सकते हैं .dll C:\Tools\migrate.exe some.dll
  6. की तरह किसी भी पथ के बिना आप इसे migrate.exe रूप में एक ही निर्देशिका में EntityFramework.dll का सही संस्करण की जरूरत है कर इम तरह एक अलग उपकरण फ़ोल्डर में migrate.exe डालें, तो वह /StartUpDirectory=<the path where you target dll is present> खंड की आवश्यकता होगी , और आप की तरह पथ के बिना विधानसभा का नाम निर्दिष्ट करना चाहिए: C:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\
  7. यहाँ powershell commmand मैं का उपयोग करें:
$SolutionPath = (Resolve-Path '..').Path 
$ToolsPath = "$SolutionPath\Build\Lib\" 

task db { 
    $migrator = $ToolsPath + 'Migrations\migrate.exe' 
    $migrateCommand = "$migrator zasz_me.dll /StartUpDirectory=$SolutionPath\zasz.me\bin\ /connectionStringName:FullContext /startUpConfigurationFile:$SolutionPath\zasz.me\Web.config /verbose" 
    Write-Host $migrateCommand 
    Invoke-Expression $migrateCommand 
} 
+0

यह मुझे ट्रैक पर मिला, धन्यवाद। मेरी विशेष समस्या यह थी कि मैं डीबीकॉन्टेक्स्ट में 'name = MyConnectionStringName' कन्स्ट्रक्टर का उपयोग कर रहा था। मैं अनुमान लगा रहा हूं लेकिन मुझे लगता है कि स्टार्टअप कॉन्फ़िगरेशनफाइल के बिना स्पष्ट रूप से सेट किया जा रहा है कि migrate.exe उपयुक्त कनेक्शन स्ट्रिंग के लिए अपनी migrate.exe.config फ़ाइल को देखता है और इसलिए विफल रहता है। StartUpConfigurationFile को जोड़ना मेरी कॉन्फ़िगरेशन फ़ाइल पर इशारा करते हुए काम किया। –

1

मैंने माइग्रेट.एक्सई के पैरामीटर के माध्यम से कनेक्शनस्ट्रिंग को ओवरराइड करने के तरीके पर एक समान प्रश्न का उत्तर दिया। मुझे अभी तक एक वेब/app.config फ़ाइल निर्दिष्ट किए बिना काम करना है।

https://stackoverflow.com/a/14138797/134761

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