Как создать графический интерфейс WinUI3 в PowerShell?C#

Место общения программистов C#
Ответить
Anonymous
 Как создать графический интерфейс WinUI3 в PowerShell?

Сообщение Anonymous »

Цель
Создать и отобразить простой графический интерфейс 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."
Похоже, для _IWindowFactory отсутствует зависимость.

Это полное сообщение об ошибке

Код: Выделить всё

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

Другие люди тоже пробовали это и получили аналогичные результаты. Еще одна проблема, связанная с этой проблемой, требующая совета от Microsoft.
Я не знаю, как Visual Studio делает все это настолько простым и автоматизированным, но я считаю, что мне нужно выполнять те же задачи вручную в PowerShell.

Подробнее здесь: https://stackoverflow.com/questions/784 ... powershell
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»