ASP.Net 更新引用的 DLL 后网站项目无法构建

ASP.Net Website project fails to build after updating a referenced DLL

所以我有一个 ASP.NET VB 网站引用了其他几个项目(他们的 DLLS 只是放在网站的 bin 文件夹中)。我需要更新其中一个项目中的一小段代码,我已经完成了并且构建良好。但是,当我将新的 DLL 复制到网站的 bin 文件夹时,它无法构建,并且所有导入语句都显示“BC40056:导入中指定的命名空间或类型 xxx 不包含any public member or cannot be found”,这会导致大量错误,例如“未定义”。在网站项目的属性中没有引用更新的DLL,但是如果我把旧版本放回去就可以了。

该项目是从服务器复制的,vbproj 文件包含对其他 DLL 的引用,但 HintPaths 是映射驱动器和 ..\..\..\ 的混合体。我已经更新了这些,以便它们都是完整的服务器位置路径,但这没有任何区别。我尝试将项目添加到与网站相同的解决方案中,并改为添加对该项目的引用,但这也没有任何区别。

我已经进行了大量的谷歌搜索,但尚未找到解决方案。非常欢迎任何帮助!

几件事 您不想只是将 .dll“放置”在 bin 文件夹中。一个很大的原因是当你做一个“干净”的项目时,bin 文件夹被删除了。因此,无论何时您执行清理项目,bin 文件夹中的内容都会被清理掉。如果出现某种问题,开发人员通常会做一个干净的项目。

我会将这些文件放在项目的某个文件夹中。 (创建一个文件夹,或者如果它只有一个或两个 .dll,则将它们放在项目的根目录中)。在编译时,.dll 将被复制到 bin 文件夹中。如果您使用 Web 部署,那么您可以选择将 .dll 全部合并为一个 .dll。所以,再一次,您可以看到将 .dll 放在 bin 文件夹中没有什么意义,因为在构建过程中不需要它们,并且如前所述,生成的 bin 文件夹可以并将作为“常规”开发process be re-created(清空)。我见过很多项目,其中开发人员确实将 .dll 放在了 bin 文件夹中(因为他们不知道还有什么地方可以放置 .dll,而这似乎是应用程序唯一可以工作的地方。但是,在web 构建 + 部署到生产服务器,那些 .dll 可以留下 - 它们不会被复制到最终的“部署”构建。(我的基本意思是不要这样做!!)。

您也可以考虑只在根目录中创建名为“packages”的文件夹。这是放置所有 nuget 包的地方。所以,这些 .dll 的一些文件夹是这里的想法。

另一个大问题?好吧,只是在某个地方删除一些 .dll 并不能为您提供开发人员在编写代码时这些 .dll 的所有方法和属性(我们假设这些是托管代码 - 而不是 win x32 .dll)。

所以,如果不添加对该程序集的引用,那么我什至看不到该项目如何正确编译,以及语法检查和程序集的一般使用在开发过程中如何工作(所以非常感到困惑的是您没有对那些 .dll 的引用 - 作为一般规则,这是行不通的)。

现在,要使用程序集吗?是的,您想添加 .dll 作为对项目的引用。

因此,在参考中,添加 .dll 作为参考。

然后在属性sheet中作参考?确保您设置了“复制本地”= true。 例如:

所以,以上是GhostScript.net参考。 (一个用于操作 pdf 的开源库)。

注意 .dll 位置的长路径名。但是,最重要的是复制本地设置 = true。这意味着在编译和构建期间(如前所述可以清除 bin 文件夹),然后 .dll 将输出到 bin 文件夹中的最终构建。

所以,我看不出在没有实际引用 .dll 的情况下如何编译任何东西。这是相当多的假设和给定的 - 否则我看不出你的项目在任何情况下如何编译。

因此,引用 .dll,它应该允许使用 class(s) 和对象,并使您的代码能够编译。并确保 copy local = true,因为这是在编译时复制 + 将 .dll 放入最终输出 (bin) 文件夹的过程。

事实证明,我尝试引用的 DLL 项目的目标 CPU 设置为 x64。将此更改为 'AnyCPU' 然后允许我引用它。

这个post给了我答案:Could not load file or assembly ... An attempt was made to load a program with an incorrect format (System.BadImageFormatException)