VS2017中ASP.NET网站无法添加64位DLL,编译及IIS部署问题求助
我之前在处理ASP.NET网站(非Web应用)的64位依赖时也踩过类似的坑,结合你的情况,给你几个实用的解决方案:
切换VS到64位运行模式
VS2017默认是32位进程,这会导致它无法识别加载64位的DLL。你可以修改VS的启动参数:右键点击VS2017快捷方式→属性,在目标输入框的末尾加上/use64bitdevenv,比如:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" /use64bitdevenv
保存后重启VS,再尝试添加64位DLL引用,应该就能在引用列表里看到了。配置Web项目使用64位IIS Express
打开VS的工具→选项→项目和解决方案→Web项目,勾选“使用64位版本的IIS Express进行网站和项目”选项。这个设置能让IDE里的调试环境匹配64位的依赖,避免编译时因平台不兼容报错。手动添加DLL到bin目录并配置web.config
如果通过引用对话框还是找不到DLL,试试手动复制64位自研库和依赖的Oracle驱动DLL到网站的bin目录下,然后在web.config的compilation节点里添加程序集引用:
<compilation debug="true" targetFramework="你的.NET版本"> <assemblies> <add assembly="你的自研库名称, Version=1.0.0.0, Culture=neutral, PublicKeyToken=你的公钥令牌"/> </assemblies> </compilation>
你可以用VS自带的ildasm.exe工具打开DLL,查看它的版本号和公钥令牌信息,确保配置里的参数和DLL实际信息一致。
- 调整IIS Express应用程序池的64位设置
找到IIS Express的配置文件(路径一般是C:\Users\你的用户名\Documents\IISExpress\config\applicationhost.config),找到你网站对应的应用程序池节点,修改enable32BitAppOnWin64属性为false:
<applicationPools> <add name="你的网站应用池名称" autoStart="true" managedRuntimeVersion="v4.0" enable32BitAppOnWin64="false" /> </applicationPools>
这个设置能确保调试时的应用程序池以64位模式运行,和服务器上的IIS 7.5环境保持一致。
- 验证DLL的平台兼容性
最后可以用VS开发者命令提示符执行dumpbin /headers 你的DLL路径命令,确认DLL的目标平台是x64,同时检查自研库的.NET版本和网站的.NET版本是否匹配,避免因版本不兼容导致的加载失败。
内容的提问来源于stack exchange,提问作者gouderadrian

