此答案涵盖以下情况:您的解决方案包含 (A) 可能相互引用的多个项目,以及 (B) 您希望在 Visual Studio 安装项目中自动进行混淆。
1) 直接在项目文件夹中为您的每个项目添加一个 Confuser.crproj 文本文件。在这个文件夹中,您应该会看到“bin”、“ob”、“resources”等文件夹。 不需要将这些文件附加到您在 Visual Studio 中的解决方案中。文本文件应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<project baseDir="obj\Release" outputDir="..\Release" xmlns="http://confuser.codeplex.com">
<rule preset="none" pattern="true">
<protection id="anti debug" />
<protection id="anti dump" />
<protection id="anti ildasm" />
<protection id="anti tamper" />
<protection id="constants" />
<protection id="ctrl flow" />
<protection id="invalid metadata" />
<protection id="ref proxy" />
<protection id="resources" />
</rule>
<module path="MyLibrary.dll" />
<probePath>..\..\bin\Release</probePath>
</project>
将 MyLibrary.dll 替换为项目的输出。 (如果它是可执行文件,请将 .dll 替换为 .exe。)
ConfuserEX 为相对路径选择不同的起点,因此文件中的路径看起来很奇怪。
此步骤的关键元素是混淆每个项目的“obj”输出。这是为了帮助您的 Windows 安装项目获取混淆版本。
2) 在每个项目的构建后事件中,添加一个构建后事件,如下所示:
if "$(ConfigurationName)" == "Release" $(SolutionDir)..\ConfuserEX\Confuser.CLI.exe $(ProjectDir)Confuser.crproj
第一个条件是仅在 Release 中构建时进行混淆。在这里,您需要调整路径以匹配您的 Confuser.CLI.exe 的路径。我在解决方案的根文件夹旁边有我的 ConfuserEX 文件夹。
3) 在您的安装项目中,我们需要解决的问题是确保打包选择您的混淆版本。安装程序有一些模糊的逻辑来决定从哪个文件夹中提取每个程序集。我们将强迫它选择正确的。为此,您必须:
(3a) 将所有项目添加为“项目输出”,这样可以确保“obj”文件夹中的混淆文件进入包中。
(3b) 检查安装项目的“检测到的依赖项”部分。每当您看到某个项目生成的依赖项时,请转到其属性并将其标记为 Exclude=True。这可以确保您在包中的混淆版本不会因为推理过程而被非混淆版本替换。