我的目的是从PowerShell调用Google Admin SDK目录更新。我从一个可运行的.NET应用程序开始,然后将其转换为一个类库(经过我的测试-它可以工作)。我将其加载到模块 list 中
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以防止错误:
这远非理想。
编辑
PowerShell-calling-my-DLL版本的InnerException是:
花费了一些时间才能找到innerException。我到处都是雪貂,找到了使用Fuslogvw的建议,所以我尝试了一下。我关闭并重新打开PowerShell,启动Fusion Log Viewer(这是我第一次使用它),并找到了log4net的三个条目。描述为:
当我打开它们时,前两个显示“操作成功”。作为文本的第二行。第三是“操作失败。绑定(bind)结果: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输出中没有任何东西可以指示问题。
最佳答案
事实证明,具有不同PublicKeyTokens的两个版本的log4net导致了其他问题。我通过将带有PublicKeyToken = 1b44e1d426115821的log4net版本添加到GAC并由于配置不匹配而向配置文件添加了另一个bindingredirect来使其工作。
您可以找到log4net版本here。您将看到对oldkey和newkey版本的引用。旧密钥有PublicKeyToken = 1b44e1d426115821,所以我只运行了
gacutil /i "C:\Users\Me\Downloads\log4net\log4net-1.2.12-bin-oldkey\log4net-1.2.12\b
in\net\4.0\release\log4net.dll"
将其粘贴在GAC中并添加:
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.12.0" newVersion="1.2.12.0" />
</dependentAssembly>
到配置文件中的assemblyBindings。
关于powershell - 'DotNetOpenAuth.Logger'的类型初始值设定项引发了异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19343991/