Создать и отобразить простой графический интерфейс WinUI3 в PowerShell 7.5, основанном на .NET 9. Ничего сложного, просто окно и кнопка в нем, как в этом XAML
Код: Выделить всё
Click Me
- Использование, импорт или определение кода C# в PowerShell полностью подходит для решения проблемы.
- Единственное, чего я не хочу делать, — это создавать/компилировать собственные двоичные файлы, такие как исполняемые файлы или библиотеки DLL. Я хочу использовать файлы .cs CSharp, не скомпилированные в PowerShell, если есть необходимость в коде CSharp.
- Загрузка и использование библиотек DLL, подписанных Microsoft, вполне допустимы.
Я создал полностью работающее приложение WinUI3 в Visual Studio 2022 с использованием последней версии WindowsApps SDK. Затем внутри папки Winui3 project\App1\bin\x64\Debug\net8.0-windows10.0.22621.0\win-x64 я попытался загрузить все библиотеки DLL в PowerShell. Загружено около 200 библиотек DLL, некоторые не удалось загрузить.
Теперь в PowerShell у меня есть доступ к типу [Microsoft.UI.Xaml.Window], но когда я пытаюсь создать его экземпляр
Код: Выделить всё
New-Object -TypeName Microsoft.UI.Xaml.Window
# Or
[Microsoft.UI.Xaml.Window]::new()
Код: Выделить всё
MethodInvocationException: Exception calling ".ctor" with "0" argument(s): "The type initializer for '_IWindowFactory' threw an exception."
Это полное сообщение об ошибке
Код: Выделить всё
Exception :
Type : System.Management.Automation.MethodInvocationException
ErrorRecord :
Exception :
Type : System.Management.Automation.ParentContainsErrorRecordException
Message : Exception calling ".ctor" with "0" argument(s): "The type initializer for '_IWindowFactory' threw an exception."
HResult : -2146233087
CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
FullyQualifiedErrorId : TypeInitializationException
InvocationInfo :
ScriptLineNumber : 1
OffsetInLine : 1
HistoryId : 4
Line : [Microsoft.UI.Xaml.Window]::new()
Statement : [Microsoft.UI.Xaml.Window]::new()
PositionMessage : At line:1 char:1
+ [Microsoft.UI.Xaml.Window]::new()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at , : line 1
TargetSite :
Name : ConvertToMethodInvocationException
DeclaringType : [System.Management.Automation.ExceptionHandlingOps]
MemberType : Method
Module : System.Management.Automation.dll
Message : Exception calling ".ctor" with "0" argument(s): "The type initializer for '_IWindowFactory' threw an exception."
Data : System.Collections.ListDictionaryInternal
InnerException :
Type : System.TypeInitializationException
TypeName : _IWindowFactory
TargetSite :
Name : get_Instance
DeclaringType : [Microsoft.UI.Xaml.Window+_IWindowFactory]
MemberType : Method
Module : Microsoft.WinUI.dll
Message : The type initializer for '_IWindowFactory' threw an exception.
InnerException :
Type : System.TypeInitializationException
TypeName : WinRT.ActivationFactory`1
TargetSite :
Name : As
DeclaringType : [WinRT.ActivationFactory`1[T]]
MemberType : Method
Module : Microsoft.WinUI.dll
Message : The type initializer for 'WinRT.ActivationFactory`1' threw an exception.
InnerException :
Type : System.Runtime.InteropServices.COMException
ErrorCode : -2147221164
TargetSite :
Name : ThrowExceptionForHR
DeclaringType : [System.Runtime.InteropServices.Marshal]
MemberType : Method
Module : System.Private.CoreLib.dll
Message : Class not registered (0x80040154 (REGDB_E_CLASSNOTREG))
Source : System.Private.CoreLib
HResult : -2147221164
StackTrace :
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
at WinRT.BaseActivationFactory..ctor(String typeNamespace, String typeFullName)
at WinRT.ActivationFactory`1..ctor()
at WinRT.ActivationFactory`1..cctor()
Source : Microsoft.WinUI
HResult : -2146233036
StackTrace :
at WinRT.ActivationFactory`1.As(Guid iid)
at Microsoft.UI.Xaml.Window._IWindowFactory..ctor()
at Microsoft.UI.Xaml.Window._IWindowFactory..cctor()
Source : Microsoft.WinUI
HResult : -2146233036
StackTrace :
at Microsoft.UI.Xaml.Window._IWindowFactory.get_Instance()
at Microsoft.UI.Xaml.Window..ctor()
at CallSite.Target(Closure, CallSite, Type)
Source : System.Management.Automation
HResult : -2146233087
StackTrace :
at System.Management.Automation.ExceptionHandlingOps.ConvertToMethodInvocationException(Exception exception, Type typeToThrow, String methodName, Int32 numArgs, MemberInfo memberInfo)
at CallSite.Target(Closure, CallSite, Type)
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at System.Management.Automation.Interpreter.DynamicInstruction`2.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
CategoryInfo : NotSpecified: (:) [], MethodInvocationException
FullyQualifiedErrorId : TypeInitializationException
InvocationInfo :
ScriptLineNumber : 1
OffsetInLine : 1
HistoryId : 4
Line : [Microsoft.UI.Xaml.Window]::new()
Statement : [Microsoft.UI.Xaml.Window]::new()
PositionMessage : At line:1 char:1
+ [Microsoft.UI.Xaml.Window]::new()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at , : line 1
Я не знаю, как Visual Studio делает все это настолько простым и автоматизированным, но я считаю, что мне нужно выполнять те же задачи вручную в PowerShell.
Подробнее здесь: https://stackoverflow.com/questions/784 ... powershell
Мобильная версия