MSBUILD 动态创建配置 XML Dotfuscator

MSBUILD Dynamically Create Config XML Dotfuscator

我正在尝试混淆目录中的一堆文件,每次构建都会生成越来越多的文件。我想知道是否有一种方法可以使用 MSBUILD 任务动态创建 Dotfuscator 配置 xml 文件,每次将新文件添加到目录时都会生成 xml 文件?

这可能是使用 Directory input 的好时机。这种类型的 Dotfuscator 输入捕获目录中的所有程序集,而不是表示单个程序集(.exe.dll)。当目录内容发生变化时,Dotfuscator 的构建将自动选取任何新程序集。

要创建带有目录输入的 Dotfuscator 配置文件,请打开 GUI 并像往常一样添加输入(方向 for Community Edition's GUI and for Professional Edition's standalone GUI),而不是 select 从 Browse... 对话框,只需导航到目录并单击 "Open",而 "File name" 仍列为 "Folder Select"。然后,保存您的配置。

从现在开始,无论何时 运行 Dotfuscator(无论是来自独立 GUI、命令行、Visual Studio 集成还是 MSBuild 任务),目录中的所有程序集都将被处理作为输入。

注意:如果您查看配置文件本身,您可能会惊讶它仍然会列出各个程序集:

<input>
  <loadpaths />
  <asmlist>
    <package refid="19e1b0c5-7221-476f-af4b-bafef68edc95">
      <file dir="C:\code\BasicTestApp\BasicTestApp\bin" name="Debug" />
      <asmlist>
        <inputassembly refid="a6da5d8d-c181-4103-840d-d8cc7c85937a">
          <option>honoroas</option>
          <option>stripoa</option>
          <option>transformxaml</option>
          <file dir="" name="BasicTestApp.exe" />
        </inputassembly>
        <inputassembly refid="df84dad0-fbe8-49ab-b8c8-9fb59e706785">
          <option>honoroas</option>
          <option>stripoa</option>
          <option>library</option>
          <option>transformxaml</option>
          <file dir="" name="ClassLibrary.dll" />
        </inputassembly>
      </asmlist>
    </package>
  </asmlist>
</input>

尽管采用这种布局,但 Dotfuscator 会在 运行 基于此配置文件构建时处理 所有 目录中的程序集,而不仅仅是那些两个列出。 配置中的程序集元素就在那里,因此您仍然可以针对 GUI 中的各个程序集制定规则(例如,使一个程序集处于库模式)。 该列表表示 GUI 上次修改配置时目录的状态。

免责声明:我在 Dotfuscator 团队工作,回答这个问题是我工作的一部分。


由于评论中的说明而引起的附加说明:目录包具有一项功能,您可以从混淆中排除某些程序集。这些程序集将被视为包工件,并且只是从输入复制到输出而无需修改。任何引用这些排除程序集的混淆程序集仍将得到正确处理。

要在 GUI 中执行此操作,请右键单击包中的程序集,然后 select "Exclude assembly from package"。或者,如果您更愿意编辑配置文件,请添加以下 <option> 标记作为每个相关 <inputassembly> 标记的子标记:

<option>artifact</option>

最新的 Dotfuscator 版本 4.41.1 有最新的标志 真的 如果文件丢失,这将生成 Dotfuscator 配置文件。您也可以按照最新入门指南 https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_protect.html

中的说明将其添加到 csproj