编译库而不检查引用

时间:2013-08-10 11:41:43

标签: c# visual-studio

我得到了一个遗留解决方案,由于参考文献,代码等原因而无法构建。

大约有50个库项目,我需要对其中一个库进行一些改动,然后编译这个库,并在部署工作系统的生产中使用它。

我不想长期使解决方案可构建,修复数百个问题等。

有没有办法跳过引用检查并构建唯一需要的库?

4 个答案:

答案 0 :(得分:3)

你可以通过(备份然后)

来做到这一点
  1. 收集所有dll /程序集
  2. 删除所有未通过解决方案构建的项目
  3. 然后通过添加参考直接包含DLL作为参考 - >浏览并选择DLL的
  4. enter image description here

    只有在能够获得与您尝试重建的源版本完全匹配的正确DLL时,才会真正起作用。虽然情况总是如此(版本控制等) - 经验告诉我这可能是最困难的部分。

答案 1 :(得分:2)

我想这需要大量的重构,但我能想到的唯一方法就是在对接口进行编程时使用依赖注入来提供模拟而不是真正的实现..但它会影响整个应用程序..

答案 2 :(得分:1)

如果您拥有来自工作系统的二进制文件,那么将它们反编译为可构建项目可能比尝试查找现有已损坏源代码库中的错误更容易。

但这基本上是一团糟,因为你必须有条不紊地将你的补丁应用到现有的破坏系统,以便在修复其他问题并从该代码库恢复构建时,你的更改不会在反编译的分支中丢失关闭系统。

答案 3 :(得分:1)

假设你有每个项目的工作dll,那么

方法1

将项目想要编译(调用此project1)复制到另一个解决方案中,并用现有的工作dll替换对其他项目的所有引用。 这应该允许您重新编译project1。

然后,您可能需要重新编译依赖于project1的任何项目。为此,您需要将依赖于project1的每个项目复制到新的解决方案中,并将对其他项目的引用替换为现有的工作dll(除了对Project1的引用)。

然后,您需要对上面阶段中复制的任何项目重复此过程,并使用工作dll替换对当前不属于新解决方案的项目的任何引用。

以递归方式重复此过程,直到不存在其他依赖关系。

方法2

将所有内容复制到一个新的解决方案中并尝试构建项目并查看无法编译的第一个项目 - (调用此项目2) 此项目不应依赖于任何其他项目,因此您可以从解决方案中删除此项目(或设置您的解决方案不要编译它)。然后浏览所有其他项目并删除对project2的任何引用,而是替换为对现有dll(project2.dll)的引用。 然后尝试再次构建项目,并在下一个无法构建的项目中重复该过程。并重复每个无法构建的项目。

完成后,您的解决方案将取决于可以构建的项目或现有的dll。

最后(重要的)

无论您使用方法1还是2,都需要确保完成的输出是一致的。例如,如果您使用的是project2.dll的旧副本和使用project2.dll但是期望更新版本的project2的新编译的项目项目,那么您可以获得逻辑上不正确的可构建程序。但是,如果源代码没有变化,那么输出应该是正确的。