Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio 2017中的引用在引擎盖下方更改_Visual Studio - Fatal编程技术网

Visual studio Visual Studio 2017中的引用在引擎盖下方更改

Visual studio Visual Studio 2017中的引用在引擎盖下方更改,visual-studio,Visual Studio,我在一个文件夹中有一堆assemblies.dll。我打开一个项目并添加对这些文件的引用 Et voila',Visual Studio将这些DLL复制到输出文件夹Debug/Release/which中,更改引用,使它们指向那里,并…将原始路径保留到prj文件中 结果:我更新了一个、一些、所有的dll,VisualStudio对此毫不在意,因为它只想使用本地dll。还有,更神奇的是,如果我做了一个重建,先进行清理,然后进行构建,引用不再有效,因为清理删除了复制的文件 为什么会这样?好吧,我随机

我在一个文件夹中有一堆assemblies.dll。我打开一个项目并添加对这些文件的引用

Et voila',Visual Studio将这些DLL复制到输出文件夹Debug/Release/which中,更改引用,使它们指向那里,并…将原始路径保留到prj文件中

结果:我更新了一个、一些、所有的dll,VisualStudio对此毫不在意,因为它只想使用本地dll。还有,更神奇的是,如果我做了一个重建,先进行清理,然后进行构建,引用不再有效,因为清理删除了复制的文件


为什么会这样?

好吧,我随机找到了答案,这只是一个坏名字的问题

首先,Visual Studio有一个选项“复制本地”:您可能认为将其设置为“否”会起作用,但它不起作用这一点很明显,在您尝试之后,因为如果他不复制输出文件夹中的dll,那么当软件运行时,它将找不到它们,除非我们在GAC中讨论程序集,但那是另一回事

就其本身而言,问题在于VisualStudio应该从原始源复制本地并保留对该源的引用,而不是在输出文件夹中复制一次,然后从那时起在内部更改对输出文件夹的引用。它仍然将原始引用保留在prj文件中,但随后会忽略它们,这样,如果您清理项目或解决方案,就没有更多的dll,并且不再编译


解决方案是什么?标记为特定版本的设置。尽管名称不同,但它并不强制使用您引用的DLL的特定版本,它只是告诉Visual Studio与Copy Local=Yes组合使用的是“始终复制”的等效项。

如果您引用的组件是其他VS项目的输出,最好是引用该项目,而不是创建的输出。在任何情况下,您都可以关闭这些引用的“复制本地”查看的属性以指示VS不要将dll复制到您的项目输出文件夹中。引用其他项目这一直是最糟糕的做法:您正在强制整个公司构建网络和代码版本控制系统,以便每个人都可以看到所有内容,另外,您正在Visual Studio中加载数十个或数百个您不需要的项目,这会给您的PC带来负担。复制本地选项不起作用,因为当软件运行时,它找不到dll。Visual Studio应该从原始源复制本地,并保留对该源的引用,并继续复制本地,而不是一次复制本地并在内部更改引用,看起来您只是错过了复制总是:真正的选项,强制VS在每个构建上拉DLL,但是没有办法指示VS在每次运行项目时拉引用。