2013-07-21 15 views
6

के माध्यम से समाधान से परियोजना को निकालें मैं समाधान प्रबंधक से कंसोल के भीतर पावरहेल का उपयोग करने की कोशिश कर रहा हूं ताकि समाधान से किसी प्रोजेक्ट को हटाया जा सके और मुझे आश्चर्यजनक रूप से कठिन समय हो।पैकेज प्रबंधक कंसोल

मैं आसानी से

PM> $dte.Solution.AddFromFile("C:\Dev\Project1.csproj")

एक परियोजना में जोड़ सकते हैं अब मैं एक परियोजना को दूर होना चाहते हैं और काम करने के लिए कुछ भी नहीं मिल सकता है।

मैं सहित चीजों के एक नंबर की कोशिश की है:

PM> $project1 = Get-Project "Project1Name" 
PM> $dte.Solution.Remove($project1)> 

Cannot convert argument "0", with value: "System.__ComObject", for "Remove" to 
type "EnvDTE.Project": "Cannot convert the "System.__ComObject" value of type 
"System.__ComObject#{866311e6-c887-4143-9833-645f5b93f6f1}" to type 
"EnvDTE.Project"."
PM> $project = Get-Interface $project1 ([EnvDTE.Project]) 
PM> $dte.Solution.Remove($project) 

Cannot convert argument "0", with value: "System.__ComObject", for "Remove" to 
type "EnvDTE.Project": "Cannot convert the "System.__ComObject" value of type 
"NuGetConsole.Host.PowerShell.Implementation.PSTypeWrapper" to type 
"EnvDTE.Project"."
PM> $project = [EnvDTE.Project] ($project1) 

Cannot convert the "System.__ComObject" value of type 
"System.__ComObject#{866311e6-c887-4143-9833-645f5b93f6f1}" to type 
"EnvDTE.Project".
PM> $solution2 = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 
PM> $solution2.Remove($project1) 

Exception calling "Remove" with "1" argument(s): "Exception calling 
"InvokeMethod" with "3" argument(s): "Object must implement IConvertible.""
PM> $dte2 = Get-Interface $dte ([EnvDTE80.DTE2]) 
PM> $dte2.Solution.Remove($project) 

Method invocation failed because [System.Object[]] doesn't contain a method 
named 'Remove'.

मैं अन्य संयोजन की कोशिश की है, लेकिन मैं स्पष्ट रूप से मेरे पहियों कताई कर रहा हूँ। मैं किसी भी सुझाव की सराहना करता हूं।

+0

क्या आपको यह काम मिल गया? मुझे एक समान ज़रूरत है। –

उत्तर

1

ऐसा लगता है कि यह "निकालें" के बजाय "हटाएं" है। इस MSDN article

Project prj = dte.Solution.Projects.Item(1); 
prj.Delete(); 
+3

एफटीए: "ध्यान दें कि यह विधि वर्तमान में कार्यान्वित नहीं है।" –

4

सही देखो, मैं जानता हूँ कि मैं पार्टी के लिए देर हो रही है, लेकिन मैं सिर्फ एक आंतरिक NuGet पैकेज हम लेखन किया गया है के लिए यह एक ही मुद्दे से निपटने के लिए किया गया है, और मुझे लगता है कि मैंने पाया है कि कैसे इसे करने के लिए।

दरअसल माइक्रोसॉफ्ट है (सहायक) छोड़ दिया हटाएँ विधि unimplemented, और दोनों पाया के रूप में हम है, Solution2 इंटरफेस पर Remove विधि कॉल करने का प्रयास कर फेंकता संदर्भ के आधार पर त्रुटियों के एक रोमांचक असंख्य!

हालांकि मैं क्या पाया है है कि सीधे Remove विधि SolutionClass में परिभाषित वास्तव में काम करता है (के बावजूद इसकी आंतरिक उपयोग के। लेकिन हे, जब हर दूसरे विकल्प समाप्त हो रहा है ... के रूप में माइक्रोसॉफ्ट द्वारा दर्ज किया गया) लागू। केवल पकड़ क्रम बांधने की मशीन भी कभी कभी विधि अधिभार समाधान करने में विफल रहा है कि, त्रुटि उत्पादन है:

No overload for method 'Remove' takes 1 arguments 

सभी जिनमें से मतलब है कि यह हमारे प्रतिबिंब क्रेयॉन बाहर निकलने के लिए समय है! कोड इस तरह दिखता है:

$removeMethod = [EnvDTE.SolutionClass].GetMethod("Remove"); 
$solution = $dte.Solution; 
$toremove = ($solution.Projects | where ProjectName -eq "<whatever>"); 
$removeMethod.Invoke($solution, @($toremove)); 

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

एक बात है कि क्योंकि परिलक्षित विधि, EnvDTE.SolutionClass में परिभाषित किया गया है इसे पारित एक EnvDTE._Solution या EnvDTE80.Solution2 एक Type mismatch त्रुटि फेंकता है, इसलिए दुर्भाग्यवश आप Get-Interface cmdlet द्वारा अपने $solution वस्तु (जो आमतौर पर मेरी पसंदीदा तरीका है) प्राप्त नहीं कर सकता है । जहां भी संभव हो [EnvDTE.SolutionClass] पर कास्ट करना स्पष्ट रूप से बेहतर है, लेकिन फिर मुझे ऐसा करने में सफलता की विभिन्न डिग्री मिल गई हैं। इसलिए ऊपर थोड़ा सा मैला $solution = $dte.Solution

आशा है कि यह किसी और के लिए उपयोगी है!

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