2

我得到了一个遗留解决方案,由于引用、代码等损坏,该解决方案无法构建。

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

我不想让解决方案变得可构建,解决数百个问题等。

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

4

4 回答 4

3

您可以通过(然后进行备份)来做到这一点

  1. 收集所有的 dll/程序集
  2. 删除所有未从解决方案中构建的项目
  3. 然后通过 Add Reference -> Browse 直接包含 DLL 作为引用并选择 DLL

在此处输入图像描述

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

于 2013-08-10T12:03:20.990 回答
2

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

于 2013-08-10T11:48:25.657 回答
1

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

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

于 2013-08-10T14:53:25.673 回答
1

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

方法一

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

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

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

并递归地重复此过程,直到不存在进一步的依赖关系。

方法二

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

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

最后(也是重要的)

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

于 2013-08-10T15:49:15.580 回答