Powershell Cmdlet缺少组装Google Api

只在尝试创建Powershell Cmdlet时遇到问题。 我可以在控制台应用程序中的进程记录中执行相同的代码。 想法是App.config没有重定向程序集,但没有太大的成功使其工作。 我使用nuget包来引用Google-api-dotnet-client

示例代码在这里
http://tinyurl.com/mbx3yle

错误
http://sofzh.miximages.com/c%23/xiEjwAR.png

Get-GAppsUsers : Could not load file or assembly 'System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

PsTest.cs

 using System.ComponentModel; using System.Collections.Generic; using Google.Apis.Admin.Directory.directory_v1.Data; using System.Management.Automation; using System; using Google.Apis.Admin.Directory.directory_v1; using Google.Apis.Authentication.OAuth2; using Google.Apis.Authentication.OAuth2.DotNetOpenAuth; using Google.Apis.Services; using Google.Apis.Util; using System.Security.Cryptography.X509Certificates; namespace PSTest { [RunInstaller(true)] public class PsTest : PSSnapIn { ///  /// Specify a description of the PowerShell snap-in. ///  public override string Description { get { return "This is a PowerShell snap-in that includes the Google Apps Lib"; } } ///  /// Specify the localization resource information for the description. /// Use the format: resourceBaseName,Description. ///  public override string DescriptionResource { get { return "GoogleAppsPSSnapIn,This is a PowerShell snap-in that includes the Google Apps Lib"; } } ///  /// Specify the name of the PowerShell snap-in. ///  public override string Name { get { return "GoogleApps"; } } ///  /// Specify the vendor for the PowerShell snap-in. ///  public override string Vendor { get { return "somecompany"; } } ///  /// Specify the localization resource information for the vendor. /// Use the format: resourceBaseName,VendorName. ///  public override string VendorResource { get { return "GoogleAppsPSSnapIn,somecompany"; } } } [Cmdlet("Get", "GAppsUsers")] public class GetGAppsUsers : PSCmdlet { protected override void ProcessRecord() { const string _serviceAccountCertPath = @"C:\cert.p12"; const string _serviceAccountEmail = @"id@developer.gserviceaccount.com"; const string _serviceAccountUser = @"someone@somewhere.com"; var certificate = new X509Certificate2( _serviceAccountCertPath, "notasecret", X509KeyStorageFlags.Exportable); var scopes = DirectoryService.Scopes.AdminDirectoryUser.GetStringValue() + @" " + DirectoryService.Scopes.AdminDirectoryGroup.GetStringValue() + @" " + DirectoryService.Scopes.AdminDirectoryOrgunit.GetStringValue() + @" " + DirectoryService.Scopes.AdminDirectoryDeviceChromeos.GetStringValue() + @" " + DirectoryService.Scopes.AdminDirectoryDeviceMobile.GetStringValue() + @" " + DirectoryService.Scopes.AdminDirectoryDeviceMobileAction.GetStringValue(); var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) { ServiceAccountId = _serviceAccountEmail, Scope = @scopes }; if (_serviceAccountUser != string.Empty) { provider.ServiceAccountUser = _serviceAccountUser; } var auth = new OAuth2Authenticator(provider, AssertionFlowClient.GetState); var _directoryService = new DirectoryService((new BaseClientService.Initializer() { Authenticator = auth })); var service = _directoryService.Users.List(); service.Customer = "my_customer"; service.OrderBy = UsersResource.ListRequest.OrderByEnum.FamilyName; service.SortOrder = UsersResource.ListRequest.SortOrderEnum.ASCENDING; service.MaxResults = 500; var allUsers = new List(); var users = service.Execute(); Int64 count = 0; if (String.IsNullOrEmpty(users.NextPageToken)) { service.PageToken = users.NextPageToken; allUsers.AddRange(users.UsersValue); count = (count + users.UsersValue.Count); Console.Write(count + "..."); } while (!String.IsNullOrEmpty(users.NextPageToken)) { service.PageToken = users.NextPageToken; allUsers.AddRange(users.UsersValue); count = (count + users.UsersValue.Count); Console.Write(count + "..."); users = service.Execute(); if (String.IsNullOrEmpty(users.NextPageToken)) { service.PageToken = users.NextPageToken; allUsers.AddRange(users.UsersValue); count = (count + users.UsersValue.Count); Console.Write(count + "..."); } } WriteObject(allUsers); } } } 

App.Config中

                         

融合日志

  *** Assembly Binder Log Entry (8/31/2013 @ 8:02:43 PM) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = NinjaWinMontage\mosheldon LOG: DisplayName = System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (Fully-specified) LOG: Appbase = file:///C:/Windows/System32/WindowsPowerShell/v1.0/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = powershell.exe Calling assembly : Google.Apis, Version=1.5.0.28972, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in LoadFrom load context. WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load(). LOG: Using application configuration file: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.Config LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Post-policy reference: System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.DLL. LOG: Assembly download was successful. Attempting setup of file: C:\Users\mosheldon\Desktop\PSTest\PSTest\bin\Debug\System.Net.Http.Primitives.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: System.Net.Http.Primitives, Version=2.1.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Run-from-source setup phase failed with hr = 0x80131040. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: All probing URLs attempted and failed. *** Assembly Binder Log Entry (8/31/2013 @ 8:02:43 PM) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = NinjaWinMontage\mosheldon LOG: DisplayName = System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (Fully-specified) LOG: Appbase = file:///C:/Windows/System32/WindowsPowerShell/v1.0/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = powershell.exe Calling assembly : Google.Apis, Version=1.5.0.28972, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in LoadFrom load context. WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load(). LOG: Using application configuration file: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.Config LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Post-policy reference: System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.DLL. LOG: Assembly download was successful. Attempting setup of file: C:\Users\mosheldon\Desktop\PSTest\PSTest\bin\Debug\System.Net.Http.Primitives.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: System.Net.Http.Primitives, Version=2.1.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Run-from-source setup phase failed with hr = 0x80131040. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: All probing URLs attempted and failed. *** Assembly Binder Log Entry (8/31/2013 @ 8:08:35 PM) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = NinjaWinMontage\mosheldon LOG: DisplayName = System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (Fully-specified) LOG: Appbase = file:///C:/Windows/System32/WindowsPowerShell/v1.0/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = powershell.exe Calling assembly : Google.Apis, Version=1.5.0.28972, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in LoadFrom load context. WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load(). LOG: Using application configuration file: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.Config LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Post-policy reference: System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.DLL. LOG: Assembly download was successful. Attempting setup of file: C:\Users\mosheldon\Desktop\PSTest\PSTest\bin\Debug\System.Net.Http.Primitives.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: System.Net.Http.Primitives, Version=2.1.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Run-from-source setup phase failed with hr = 0x80131040. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: All probing URLs attempted and failed. *** Assembly Binder Log Entry (8/31/2013 @ 8:08:35 PM) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = NinjaWinMontage\mosheldon LOG: DisplayName = System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (Fully-specified) LOG: Appbase = file:///C:/Windows/System32/WindowsPowerShell/v1.0/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = powershell.exe Calling assembly : Google.Apis, Version=1.5.0.28972, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in LoadFrom load context. WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load(). LOG: Using application configuration file: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.Config LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Post-policy reference: System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Windows/System32/WindowsPowerShell/v1.0/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.DLL. LOG: Assembly download was successful. Attempting setup of file: C:\Users\mosheldon\Desktop\PSTest\PSTest\bin\Debug\System.Net.Http.Primitives.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: System.Net.Http.Primitives, Version=2.1.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Run-from-source setup phase failed with hr = 0x80131040. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.DLL. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives.EXE. LOG: Attempting download of new URL file:///C:/Users/mosheldon/Desktop/PSTest/PSTest/bin/Debug/System.Net.Http.Primitives/System.Net.Http.Primitives.EXE. LOG: All probing URLs attempted and failed. 

将System.Net.Http.Primitives版本2.1.10和1.5添加到GAC

 Get-GAppsUsers : Method not found: 'Void System.Net.Http.HttpClientHandler.set_ AutomaticDecompression(System.Net.DecompressionMethods)'. 

  1. 在GAC中注册以下内容(dacu的gacutil / i 路径

    • System.Net.Http 2.1.10.0
    • System.Net.Http.Primitives 2.1.10.0
    • log4net 1.2.10.0
  2. 将绑定重定向添加到“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config”(替换当前运行时标记)