2015-11-20 24 views
5

Birkaç gün için bir çözüm arıyordum. Yanıtların hiçbiri, PowerShell oturumundan uygulama alanına .NET referanslarını (load?) Derlemektir.Yükleme .NET derleme bağımlılıkları çalışmıyor

Önce başvuruları yükledim (bu, daha önce belirtilen DLL tarafından başvurulan olması gereken [Reflection.Assembly]::LoadFile() veya [Reflection.Assembly]::LoadFrom()), daha sonra Add-Type numaralı telefonu arayarak .NET DLL'imi yüklerim.

Ne yazık ki bu çalışmıyor çünkü bu DLL'den birkaç örnek oluşturamıyorum. Ben normal C# projesinde ekli başvurular olmadan DLL kullandığınızda aynı hatalar alıyorum ama diğer derlemeler ve yeniden derleme başvurduğum sürece hataları olmadan çalışır (ben LinqPad olarak kontrol ettiğim gibi başvurulan derlemeler nedeniyle onaylayabilirsiniz iyi).

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 
o PowerShell script

üçüncü satır atar:

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 sorgusu (C# Programı; referanslar Connector.dll) - Bu çalışıyor

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

Peki, sorun nedir? Bağımlılıkları/referansları yüklemeden önce * Add * Type * yükleyemiyor musunuz? –

+0

Evet, onları (Add-Type) daha önce yüklerim ve ana DLL'nin derlemeleri düzgün şekilde çözmemesi için farklı bir kapsama yüklenmiş gibi görünüyor. LINQPad'de aynı kod var ve çalışıyor. – algorytmus

+0

Assembly.LoadFrom'unu kullanarak denediniz mi? – SOReader

cevap

İlgili konular