3
我想將以下C#代碼轉換爲PowerShell(我忽略了我認爲不相關的代碼部分):'無法轉換PowerShell中的「System .__ ComObject」值...'錯誤
C#
System.Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0", true);
object obj = System.Activator.CreateInstance(t, true);
EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)obj;
dte.MainWindow.Activate();
dynamic solution = dte.Solution;
solution.Create(solution_folder_path, solution_name);
solution.SaveAs(solution_file_path);
dynamic project = solution.AddFromTemplate(template_path, project_folder_path, project_name);
TCatSysManagerLib.ITcSysManager system_manager = project.Object;
PowerShell的
[System.Reflection.Assembly]::LoadFrom("C:\Windows\assembly\GAC_MSIL\TCatSysManagerLib\2.1.0.0__180016cd49e5e8c3\TCatSysManagerLib.dll");
$dte = New-Object -ComObject VisualStudio.DTE.10.0
$dte.SuppressUI = $false
$dte.MainWindow | %{$_.GetType().InvokeMember("Visible", "SetProperty", $null, $_, $true)}
$solution = $dte.Solution
$project = $solution.AddFromTemplate($template_path, $project_folder_path, $project_name)
[TCatSysManagerLib.ITcSysManager] $system_manager = [TCatSysManagerLib.ITcSysManager] $project.Object
,我跑的問題到的是,在PowerShell中的最後一行將返回以下形式的錯誤:
無法轉換的類型 「系統.__ ComObject」 值 「系統.__ ComObject#{3b56a5ce-0c02-440b-8ced-f1f3e83f66ed}」鍵入 「TCatSysManagerLib.ITcSysManager」。
添加細節:
我可以離開了在PowerShell代碼的[TCatSysManagerLib.ITcSysManager]
類型。我遇到同樣的問題,但是在以後將這個C#代碼:
TCatSysManagerLib.ITcSmTreeItem gvl = system_manager.LookupTreeItem("TIPC^PLC1^PLC1 Project^GVLs^GVL");
TCatSysManagerLib.ITcPlcDeclaration gvl_declaration = (TCatSysManagerLib.ITcPlcDeclaration)gvl;
string gvl_declaration_text = System.IO.File.ReadAllText(gvl_declaration_text_file_path);
gvl_declaration.DeclarationText = gvl_declaration_text;
在這種情況下,我必須做出投給TCatSysManagerLib.ITcPlcDeclaration
類型,以獲取的gvl_declaration
的DeclarationText
財產。
我是新來的C#和PowerShell和從實例修改了這些。任何意見,將不勝感激。
謝謝您的迴應。不幸的是,我並不熟悉這些術語。我想我將不得不做一些背景閱讀。 – Patrick
如果你想簡化一下,我建議:1)決定你的解決方案是否可以在VS內運行。如果可以的話,你可以使用$ DTA變量,希望你現有的代碼不需要太多的mod。無論如何,即使您的解決方案必須在VS外部,您也可能想要這樣做,只是爲了證明您的PS腳本。 2)決定是否可以使用StudioShell之類的工具。順便說一句,從我可以告訴,PS中的類型轉換與C#中的轉換不一樣,所以我不確定我是否希望演員能像你想要的那樣工作。 'MethodInfo'是.NET類型:System.Reflection.MethodInfo。 GetMethod是一個System.Type方法 –