通常情况下,一个bin文件夹的目的是为您的部署包的主要成分。在非常简单的应用程序部署中,程序需要的所有内容都存在于bin文件夹中。你可以复制粘贴该文件夹在任何地方,它会工作。当然,如果你的外部装配不在那里,那不会发生。
你发现那些程序集不应该存在于你的开发机器上的两个地方,我明白你为什么不喜欢那个。 CopyLocal默认设置为true的原因是因为我上面描述的典型场景值得在开发机器中存在两次程序集的成本。通常情况下,应用程序将比开发机器多出许多倍的客户端机器,因此单个部署文件夹的简单性值得开发机器上磁盘空间的成本。
你说你自己,你会包括:每当你想给你的exe文件给别人lib文件夹?仅仅给bin文件夹添加所有内容不是更简单吗?
在你原来的问题中,你提到编译器找不到程序集,我认为这是不正确的,我测试了类似的情况。编译器找到了程序集,但是当我尝试执行代码时,运行时告诉我它找不到它。编译器不会插入代码以使可执行文件查找程序集的相对路径。您可以找到.Net外部程序集here的详细探测行为。你的EXE不能奇迹般地猜到程序集是在父文件夹的lib文件夹中。
您可以通过编写自己的程序集分辨率来规避所有这些情况,但除非您要挨饿几千字节的磁盘空间,否则让Visual Studio可以做到这一点。
如果你不想注册组件与GAC或惹的文件路径,然后请你帮个忙,并让他们在同一文件夹作为您的可执行文件。 – hoodaticus
我宁愿乱用文件路径;)我想了解它是如何工作的 – fazega
然后,Derek给了你你应该接受的答案。您可以重写程序集解析过程,并使用C#代码自己在运行时查找并加载DLL。 – hoodaticus