【发布时间】:2019-12-09 07:42:03
【问题描述】:
有点傻的问题,但我还是看不懂。
假设我有 A.exe 文件和 B.dll 文件。 B.dll 位于 ../Somewhere/Debug/B.dll。
我从我的 A.exe 项目中引用了这个 .dll,但是当我执行 A.exe 时,它会查找 B.dll 在 A.exe 所在的同一目录中。那么为什么我必须在我的 A.exe 中指定 B.dll (../Somewhere/Debug/B.dll) 的路径> 项目如果它实际上不使用它?
我可以使用 CopyLocal = true 构建引用 ../Somewhere/Debug/B.dll 的 A.exe。然后,我可以对 B.dll 进行更改(例如添加一个新类)并构建它。之后,我可以在我的 A.exe 项目中使用该新类,但如果我在 B.dll 上设置 CopyLocal 对 B.dll 的引用strong>false 并构建 A.exe,一旦我尝试执行 A.exe,我将面临 TypeLoadException,因为它使用旧版本的 B.dll,它位于 A.exe 所在的同一文件夹中。
与位于 GAC 中的强命名程序集相同。我引用了这个程序集(例如 ../Test/My.dll),但 CLR 仍然使用位于 GAC 中的程序集。
Visual Studio 中的引用是否起任何作用,或者它们只是用于开发目的(如 IntelliSense)?
【问题讨论】:
-
编译器需要知道要链接到哪些程序集,因此它知道在哪里查找您正在使用的类。试着去掉所有的引用,看看你的项目是否成功。
标签: c# .net visual-studio dll