在转换MVC / EntityFramework解决方案(VS2012)和实用程序解决方案后,我遇到了问题“任何CPU'至' x64'。我需要这样做,因为部署机器上只有Oracle x64驱动程序,并且这些驱动程序不会加载任何CPU'出于某种原因。
错误是:'无效的装配平台或ContentType'。
好。某处32/64位不匹配。
我重新验证了所有项目有' x64'组。控制台应用程序项目(在实用程序解决方案中)都运行正常,并在任务管理器中显示为完全64位。这些控制台应用程序现在可以与Oracle 64位驱动程序通信,但它们并没有“任何CPU”。一切看起来都不错。
但是当我现在使用Visual Studio开发服务器运行MVC项目时,它从实用程序解决方案获得的程序集(utility1.dll)现在无法使用“无效的程序集平台”或“ContentType'”。所有控制台应用程序也成功使用此程序集。我使用Fusion Log Viewer(fuslogvw.exe)验证了错误:
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\user1\Documents\Visual Studio 2012\Projects\mvcWebSite\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/4446faac/e5108f09/utility1.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/4446faac/e5108f09/utility1/utility1.DLL.
LOG: Attempting download of new URL file:///C:/Users/user1/Documents/Visual Studio 2012/Projects/mvcWebSite/bin/utility1.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Users\user1\Documents\Visual Studio 2012\Projects\mvcWebSite\bin\utility1.dll
LOG: Entering download cache setup phase.
LOG: Assembly Name is: utility1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
ERR: Invalid assembly platform or ContentType in file (hr = 0x8007000b).
ERR: Setup failed with hr = 0x8007000b.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
为什么使用' C:\ Windows \ Microsoft.NET \ Framework'而不是' C:\ Windows \ Microsoft.NET \ Framework64'?部分问题是什么?
所以我在mvcWebSite bin目录中运行了一个arch设置读取器实用程序(它应该包含网站中的所有DLL,这就是我所看到的):
这台机器是64位
AntiXssLibrary.dll - I386 - ILOnly
Antlr3.Runtime.dll - I386 - ILOnly
utility1.dll - AMD64 - ILOnly, PE32Plus
utility2.dll - AMD64 - ILOnly, PE32Plus
EntityFramework.dll - I386 - ILOnly
HtmlSanitizationLibrary.dll - I386 - ILOnly
log4net.dll - I386 - ILOnly
Microsoft.Practices.Unity.Configuration.dll - I386 - ILOnly
Microsoft.Practices.Unity.dll - I386 - ILOnly
Microsoft.ReportViewer.Common.dll - I386 - ILOnly
Microsoft.ReportViewer.WebForms.dll - I386 - ILOnly
MvcReportViewer.dll - I386 - ILOnly
Newtonsoft.Json.dll - I386 - ILOnly
Oracle.DataAccess.dll - AMD64 - ILOnly, PE32Plus
RestSharp.dll - I386 - ILOnly
System.Web.Helpers.dll - I386 - ILOnly
System.Web.Http.dll - I386 - ILOnly
System.Web.Http.WebHost.dll - I386 - ILOnly
System.Web.Mvc.dll - I386 - ILOnly
System.Web.Optimization.dll - I386 - ILOnly
System.Web.Razor.dll - I386 - ILOnly
System.Web.WebPages.Deployment.dll - I386 - ILOnly
System.Web.WebPages.dll - I386 - ILOnly
System.Web.WebPages.Razor.dll - I386 - ILOnly
Unity.Mvc4.dll - I386 - ILOnly
mvcWebsite.dll - AMD64 - ILOnly, PE32Plus
这看起来不错吗?我不知道为什么utility1不会加载。我担心“任何CPU”还有一个遗留问题。此处仍然有效的设置。
感谢您的任何建议!
答案 0 :(得分:0)
我的问题是Visual Studio内部Web服务器不喜欢64位应用程序 - 因此它不喜欢64位程序集。我切换到了一个本地IIS服务器(在项目Web设置中)。
我知道如果要部署到远程IIS,则需要注意Web应用程序分配的应用程序池中的“允许32位应用程序”设置。
Hopwe这有帮助。
答案 1 :(得分:0)
当我使用'Any CPU'时,我遇到了与AMD64的第三方库类似的问题。
在web.config的system.web部分中:
<compilation debug="true" targetFramework="4.5" >
<assemblies>
<remove assembly="The.Offending.Library.Name"/>
</assemblies>
</compilation>
我的麻烦一直是间歇性的,我不确定这实际上已经解决了这个问题,但它似乎已经解决了。希望能帮助到你。