Моя цель — вызвать обновления каталога Google Admin SDK из PowerShell. Я начал с работающего приложения .NET и преобразовал его в библиотеку классов (которую я протестировал - она работает). Я загружаю это в манифест модуля с помощью
RequiredAssemblies = @('My.GoogleAdminSDK.Directory.dll')
Моя функция Get-GoogleSDKUser New-Objects мой класс и вызывает для него GetUser. И я получаю:
Exception calling "GetUser" with "1" argument(s): "The type initializer for
'DotNetOpenAuth.Logger' threw an exception."
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\My.googleadminsdkdirectory.admin\My.GoogleA
dminSDKDirectory.Admin.psm1:56 char:9
+ $service.GetUser($googleUserName)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : TypeInitializationException
Я попытался добавить файл конфигурации для log4net, который создал пустой файл журнала, но это не помогло.
Примечание: чтобы зайти так далеко, мне пришлось добавить
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.12.0" newVersion="1.2.12.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
в powershell_ise.exe.config, чтобы предотвратить ошибку:
«Не удалось загрузить файл или сборку «System.Net.Http.Primitives, версия = 1.5.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a» или одна из ее зависимостей. Система не может найти указанный файл».
что далеко от идеала.
ИЗМЕНИТЬ
InnerException для версии PowerShell-calling-my-DLL:
Не удалось загрузить файл или сборку «log4net, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 1b44e1d426115821» или одну из ее зависимостей. Система не может найти указанный файл.
Потребовалось немного покопаться, чтобы найти innerException. У меня было немного хорька, и я нашел предложения использовать Fuslogvw, поэтому я попробовал это. Я закрыл и снова открыл PowerShell, запустил Fusion Log Viewer (я использовал его впервые) и нашел три записи для log4net. Описания:
- log4net
- log4net, версия = 1.2.12.0, культура = нейтральная, PublicKeyToken = 669e0ddf0bb1aa2a
- log4net, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 1b44e1d426115821
Когда я их открываю, на первых двух написано: «Операция прошла успешно». в качестве второй строки текста. У третьего «Операция не удалась». Результат привязки: hr = 0x80070002. Система не может найти указанный файл.'
Когда я копаюсь в этом журнале, я нахожу:
LOG: Assembly download was successful. Attempting setup of file: C:\windows\system32\windowspowershell\v1.0\Modules\JLP.GoogleAdminSDKDirectory.Admin\log4net.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: log4net, Version=1.2.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
WRN: Comparing the assembly name resulted in the mismatch: Build Number
ERR: The assembly reference did not match the assembly definition found.
Я снова попытался запустить его из Visual Studio. В fuslogvw также было три записи, и в третьей была такая же ошибка. Но в выводе VS нет ничего, что указывало бы на проблему.