Vb.net TwainDotNet System.TypeInitializationException错误
我正在尝试将TWAIN支持添加到我已经编写了一段时间的程序中。我正在使用来自的TwainDotNet 我已经能够使vb.net示例适应新的测试项目,而不会出现问题。然而,当我把它放到我当前项目的表单中时,我得到了一个错误 代码: 错误:Vb.net TwainDotNet System.TypeInitializationException错误,vb.net,Vb.net,我正在尝试将TWAIN支持添加到我已经编写了一段时间的程序中。我正在使用来自的TwainDotNet 我已经能够使vb.net示例适应新的测试项目,而不会出现问题。然而,当我把它放到我当前项目的表单中时,我得到了一个错误 代码: 错误: 'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\TwainDotNet.dll'. S
'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\TwainDotNet.dll'. Symbols loaded.
'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\TwainDotNet.WinFroms.dll'. Symbols loaded.
'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\Program-CustomDlls.dll'. Symbols loaded.
Exception thrown: 'System.TypeInitializationException' in TwainDotNet.dll
它死亡的代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using TwainDotNet.TwainNative;
using TwainDotNet.Win32;
using System.Drawing;
namespace TwainDotNet
{
public class Twain
{
DataSourceManager _dataSourceManager;
public Twain(IWindowsMessageHook messageHook)
{
ScanningComplete += delegate { };
TransferImage += delegate { };
_dataSourceManager = new DataSourceManager(DataSourceManager.DefaultApplicationId, messageHook);
_dataSourceManager.ScanningComplete += delegate(object sender, ScanningCompleteEventArgs args)
{
ScanningComplete(this, args);
};
_dataSourceManager.TransferImage += delegate(object sender, TransferImageEventArgs args)
{
TransferImage(this, args);
};
}
/// <summary>
/// Notification that the scanning has completed.
/// </summary>
public event EventHandler<ScanningCompleteEventArgs> ScanningComplete;
public event EventHandler<TransferImageEventArgs> TransferImage;
/// <summary>
/// Starts scanning.
/// </summary>
public void StartScanning(ScanSettings settings)
{
_dataSourceManager.StartScan(settings);
}
/// <summary>
/// Shows a dialog prompting the use to select the source to scan from.
/// </summary>
public void SelectSource()
{
_dataSourceManager.SelectSource();
}
/// <summary>
/// Selects a source based on the product name string.
/// </summary>
/// <param name="sourceName">The source product name.</param>
public void SelectSource(string sourceName)
{
var source = DataSource.GetSource(
sourceName,
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
_dataSourceManager.SelectSource(source);
}
/// <summary>
/// Gets the product name for the default source.
/// </summary>
public string DefaultSourceName
{
get
{
using (var source = DataSource.GetDefault(_dataSourceManager.ApplicationId, _dataSourceManager.MessageHook))
{
return source.SourceId.ProductName;
}
}
}
/// <summary>
/// Gets a list of source product names.
/// </summary>
public IList<string> SourceNames
{
get
{
var result = new List<string>();
var sources = DataSource.GetAllSources(
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
foreach (var source in sources)
{
result.Add(source.SourceId.ProductName);
source.Dispose();
}
return result;
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
运用系统反思;
使用System.Runtime.InteropServices;
使用TwainDotNet.twainential;
使用TwainDotNet.Win32;
使用系统图;
名称空间TwainDotNet
{
公共类吐温
{
DataSourceManager_DataSourceManager;
公共Twain(IWindowsMessageHook messageHook)
{
ScanningComplete+=委托{};
TransferImage+=委托{};
_dataSourceManager=新的dataSourceManager(dataSourceManager.DefaultApplicationId,messageHook);
_dataSourceManager.ScanningComplete+=委托(对象发送方,ScanningCompleteEventArgs参数)
{
扫描完成(本,args);
};
_dataSourceManager.TransferImage+=委托(对象发送方,TransferImageEventArgs args args)
{
TransferImage(本,args);
};
}
///
///扫描已完成的通知。
///
公共事件事件处理程序扫描完成;
公共事件事件处理程序;
///
///开始扫描。
///
公共无效开始扫描(扫描设置)
{
_dataSourceManager.StartScan(设置);
}
///
///显示一个对话框,提示用户选择要扫描的源。
///
public void SelectSource()
{
_dataSourceManager.SelectSource();
}
///
///根据产品名称字符串选择源。
///
///源产品名称。
public void SelectSource(字符串sourceName)
{
var source=DataSource.GetSource(
sourceName,
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
_数据源管理器。选择源(source);
}
///
///获取默认源的产品名称。
///
公共字符串DefaultSourceName
{
得到
{
使用(var source=DataSource.GetDefault(_dataSourceManager.ApplicationId,_dataSourceManager.MessageHook))
{
返回source.SourceId.ProductName;
}
}
}
///
///获取源产品名称的列表。
///
公共IList源名称
{
得到
{
var result=新列表();
var sources=DataSource.GetAllSources(
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
foreach(源中的var源)
{
结果.Add(source.SourceId.ProductName);
source.Dispose();
}
返回结果;
}
}
}
}
第21行:_dataSourceManager=newdatasourcemanager(dataSourceManager.DefaultApplicationId,messageHook)
我不知道它为什么会死,调试消息也很模糊。有什么想法吗?问题是由于我编译的是哪种CPU类型。我获取了TwainDotNet的代码,并为x86重新编译了它。然后,我将主程序设置为针对x86编译。现在可以了 我一直在为任何CPU编译。log4net.dll是为x86编译的,TwainDotNet需要它。我还认为Twain是为x86编译的,但我无从得知
不用说,我现在正在编译x86体系结构。TypeLoadException告诉您(可能)无法加载DataSourceManager所在的程序集。因此,请找出此类型驻留在哪个程序集中,并将其放置在您的bin dir中。
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using TwainDotNet.TwainNative;
using TwainDotNet.Win32;
using System.Drawing;
namespace TwainDotNet
{
public class Twain
{
DataSourceManager _dataSourceManager;
public Twain(IWindowsMessageHook messageHook)
{
ScanningComplete += delegate { };
TransferImage += delegate { };
_dataSourceManager = new DataSourceManager(DataSourceManager.DefaultApplicationId, messageHook);
_dataSourceManager.ScanningComplete += delegate(object sender, ScanningCompleteEventArgs args)
{
ScanningComplete(this, args);
};
_dataSourceManager.TransferImage += delegate(object sender, TransferImageEventArgs args)
{
TransferImage(this, args);
};
}
/// <summary>
/// Notification that the scanning has completed.
/// </summary>
public event EventHandler<ScanningCompleteEventArgs> ScanningComplete;
public event EventHandler<TransferImageEventArgs> TransferImage;
/// <summary>
/// Starts scanning.
/// </summary>
public void StartScanning(ScanSettings settings)
{
_dataSourceManager.StartScan(settings);
}
/// <summary>
/// Shows a dialog prompting the use to select the source to scan from.
/// </summary>
public void SelectSource()
{
_dataSourceManager.SelectSource();
}
/// <summary>
/// Selects a source based on the product name string.
/// </summary>
/// <param name="sourceName">The source product name.</param>
public void SelectSource(string sourceName)
{
var source = DataSource.GetSource(
sourceName,
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
_dataSourceManager.SelectSource(source);
}
/// <summary>
/// Gets the product name for the default source.
/// </summary>
public string DefaultSourceName
{
get
{
using (var source = DataSource.GetDefault(_dataSourceManager.ApplicationId, _dataSourceManager.MessageHook))
{
return source.SourceId.ProductName;
}
}
}
/// <summary>
/// Gets a list of source product names.
/// </summary>
public IList<string> SourceNames
{
get
{
var result = new List<string>();
var sources = DataSource.GetAllSources(
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
foreach (var source in sources)
{
result.Add(source.SourceId.ProductName);
source.Dispose();
}
return result;
}
}
}
}