2015-11-20 25 views
5

私は数日間ソリューションを探していました。私のケースでは、PowerShellセッションから.NETをアプリケーションドメインに参照(ロード?)することはできません。.NETアセンブリの依存関係が動作しない

私は先に参照をロードします(前述のDLLが動作するためには[Reflection.Assembly]::LoadFile()または[Reflection.Assembly]::LoadFrom()である必要があります)。Add-Typeを呼び出して.NET DLLをロードします。

残念ながら、それは動作していないので、私はそのDLLからいくつかのインスタンスを作成することはできません。通常のC#プロジェクトで参照を付けずにDLLを使用すると同じエラーが発生しますが、他のアセンブリを参照して再コンパイルすると、エラーなしで動作します(LinqPadで確認したので、よく)。

のPowerShell:そのPowerShellスクリプトの

[System.Reflection.Assembly]::LoadFile((Get-Item -Path ".\System.Data.SQLite.dll").FullName) 
Add-Type -Path (Get-Item -Path ".\Connector.dll").FullName -ReferencedAssemblies (Get-Item -Path ".\System.Data.SQLite.dll").FullName -PassThru | Out-Null 
$certMGT = New-Object Connector 

三行目はスロー:

New-Object : Exception calling ".ctor" with "0" argument(s): "Failed to find or load the registered .Net Framework Data Provider." 
At C:\Repos\Connector\bin\Installer.ps1:306 char:20 
+   $certMGT = New-Object Connector 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [New-Object], MethodInvocationException 
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand 

PSMessageDetails  : 
Exception    : System.Management.Automation.MethodInvocationException: Exception calling ".ctor" with "0" argument(s): "Failed to find or load the registered .Net Framework 
         Data Provider." ---> System.Configuration.ConfigurationErrorsException: Failed to find or load the registered .Net Framework Data Provider. 
          at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) 
          at System.Data.EntityClient.EntityConnection.GetFactory(String providerString) 
          at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 
          at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) 
          at Connector.Entity.ConnectorDBEntities..ctor(String connectionString) 
          at Connector.DBManager..ctor() 
          at Connector.DAL.ConfigurationDAL..ctor() 
          at Connector.ConnectorConfig..ctor() 
          at Connector.ConnectorCertMGT..ctor() 
          --- End of inner exception stack trace --- 
          at System.Management.Automation.DotNetAdapter.AuxiliaryConstructorInvoke(MethodInformation methodInformation, Object[] arguments, Object[] originalArgumen 
         ts) 
          at System.Management.Automation.DotNetAdapter.ConstructorInvokeDotNet(Type type, ConstructorInfo[] constructors, Object[] arguments) 
          at Microsoft.PowerShell.Commands.NewObjectCommand.CallConstructor(Type type, ConstructorInfo[] constructors, Object[] args) 
TargetObject   : 
CategoryInfo   : InvalidOperation: (:) [New-Object], MethodInvocationException 
FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand 
ErrorDetails   : 
InvocationInfo  : System.Management.Automation.InvocationInfo 

LinqPadクエリ(C#プログラム; Connector.dllを参照) - これは細かい

void Main() 
{ 
    Assembly.LoadFile(@"C:\Repos\Connector\bin\System.Data.SQLite.dll"); 
    Connector connector = new Connector();//this also throws exactly the same error if I do not LoadFile as in above line 
} 
+0

問題は何ですか? 'Add-Type'を呼び出す前に依存関係/参照*をロードできませんか? –

+0

はい、私は以前に(Add-Type)をロードしていますが、メインDLLがアセンブリを適切に解決しないように別のスコープにロードされているようです。私はLINQPadで同じコードを持っており、それは動作します。 – algorytmus

+0

'Assembly.LoadFrom'を使ってみましたか? – SOReader

答えて

関連する問題