无法加载文件或程序集“ System.Data.SQLite”

我在ASP.NET项目中安装了ELMAH 1.1 .Net 3.5 x64,现在遇到此错误(无论何时尝试查看任何页面):


无法加载文件或程序集'System.Data.SQLite,版本= 1.0.61.0,区域性=中性,PublicKeyToken = db937bc2d44ff139'或其依赖项之一。试图加载格式错误的程序。


说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。


异常详细信息:System.BadImageFormatException:无法加载文件或程序集'System.Data.SQLite,版本= 1.0.61.0,Culture =中性,PublicKeyToken = db937bc2d44ff139'或其依赖项之一。试图加载格式错误的程序。


底部有更多错误详细信息。


我的Active Solution平台是“任何CPU”,并且我正在x64处理器上当然在x64 Windows 7上运行。之所以使用此版本的ELMAH,是因为1.0 .Net 3.5(x86,这是为其编译的唯一平台)在x64 Windows服务器上给了我们同样的错误。


我尝试为x86和x64进行编译,但遇到相同的错误。我试着删除所有编译器输出(bin和obj)。最终,我直接引用了SQLite dll,该项目在服务器上运行时不需要它,并且出现了此编译器错误:


错误1错误警告:程序集生成-引用的程序集'System.Data.SQLite.dll'针对其他处理器MyProject


任何想法可能是什么问题?


更多错误详细信息:


源错误:


当前Web请求的执行期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常的来源和位置的信息。


堆栈跟踪:


[BadImageFormatException:无法加载文件或程序集'System.Data.SQLite,版本= 1.0.61.0,文化=中性,PublicKeyToken = db937bc2d44ff139'或其依赖项之一。试图加载格式错误的程序。] 

System.Reflection.Assembly._nLoad(AssemblyName文件名,字符串codeBase,证据AssemblySecurity,程序集locationHint,StackCrawlMark&stackMark,布尔throwOnFileNotFound,布尔值用于自省)+0 

System.Reflection.Assembly .nLoad(AssemblyName文件名,字符串codeBase,证据assemblySecurity,程序集locationHint,StackCrawlMark&stackMark,布尔throwOnFileNotFound,布尔forIntrospection)+43

System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,证据assemblySecurity,StackCrawlMark&stackMark,布尔值用于自省)+127 System.Reflection.Assembly.InternalLoad(字符串assemblyString,证据AssemblySecurity,StackCrawlMark&stackMark,Boolean forIntrospection)+142 System.Reflection.Assembly Load(字符串assemblyString)+28 

System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串assemblyName,布尔型starDirective)+46


翻翻过去那场雪
浏览 2918回答 4
4回答

泛舟湖上清波郎朗

System.Data.SQLite.dll是混合程序集,即它既包含托管代码又包含本机代码。因此,特定的System.Data.SQLite.dll是x86或x64,但两者都不是。更新(由J. Pablo Fernandez提供): Cassini,当您按下F5或单击绿色的“播放”按钮时,Visual Studio使用的开发Web服务器仅是x86,这意味着即使您的工作站是x64,您也只能能够使用System.Data.SQLite.dll的x86版本。另一种选择是不使用Cassini,而是使用IIS7,它是正确的x64。

炎炎设计

确保将应用程序池的“启用32位应用程序”设置为false。

饮歌长啸

转到IIS7 Application Pool -> advanced settings and set the 32-bit application to true。

守候你守候我

如果您不使用SQLite,这非常简单:您可以从解决方案的bin文件夹中删除SQLite DLL,然后从引用ELMAH的文件夹中删除。重建,并且您的应用程序将不会尝试加载您未使用的DLL。
打开App,查看更多内容
随时随地看视频慕课网APP