Joe*_*rle 23

您可以使用商业版Dotfuscator通过添加部署清单("foo.application")作为Dotfuscator项目的输入来自动模糊ClickOnce应用程序.Dotfuscator允许您向ClickOnce应用程序中包含的程序集添加任何必要的排除项,并将创建包含模糊程序集的更新的部署和应用程序清单.

Visual Studio中包含的免费Dotfuscator版本(包括Visual Studio 2010)没有自动混淆ClickOnce应用程序的功能.为了获得功能模糊的ClickOnce应用程序,您需要重新创建或更新ClickOnce清单,因为模糊处理会更改程序集的签名.

您可以使用mage.exemageui.exe(包含在Windows/.NET SDK中)来更新ClickOnce清单.如果您要使用mage.exe,则需要注意不能在ClickOnce选项中使用"使用.deploy文件扩展名"选项,因为它无法识别它.

假设您的ClickOnce应用程序名为"Foo"且版本为1.0.0.0,您需要遵循的过程是:

  1. 将ClickOnce应用程序发布到磁盘上的目录
  2. 运行Dotfuscator CE并从项目的bin目录添加要混淆的程序集
  3. 混淆程序集.默认情况下,模糊的程序集将放入名为"Dotfuscated"的子目录中.
  4. 使用sn.exe重新设置模糊处理程序集(仅当您最初强名称它们时)
  5. 将模糊处理的程序集复制到ClickOnce发布\应用程序文件\ Foo_1_0_0_0目录中的程序集之上
  6. 更新应用程序清单并将其重新签名:

    mage.exe -Update"Application Files\Foo_1_0_0_0\Foo.exe.manifest"-CertFile"c:\ Foo\foo.pfx" - 密码密码

  7. 更新部署清单并将其重新签名:

    mage.exe -Update Foo.application -AppManifest"Application Files\Foo_1_0_0_0\Foo.exe.manifest"-CertFile"c:\ Foo\foo.pfx" - 密码密码

您现在拥有使用模糊处理程序集的有效应用程序和部署清单.您还可以使用MageUI.exe工具完成相同的任务(并且它知道如何处理扩展名为.deploy的程序集)但是自动化并不容易.


小智 5

我有一个类似于Joe Kuemerle的解决方案,但是在发布过程之前。这可以在Visual StudioMSBuild命令行中进行发布。

BeforePublish目标添加到项目文件。

<ItemGroup>
    <ClickOnceFiles Include="bin\Release\ClickOnce.*"/>
</ItemGroup>
<Target Name="BeforePublish">
    <Exec Command="{path to dotfuscator}\dotfuscator.exe Dotfuscator.xml" />
    <Exec Command="mage.exe -u bin\Release\ClickOnce.exe.manifest" />
    <Exec Command="mage.exe -u bin\Release\ClickOnce.application -AppManifest bin\Release\ClickOnce.exe.manifest" />
    <Copy SourceFiles="@(ClickOnceFiles)" DestinationFolder="obj\Release" OverwriteReadOnlyFiles="True" />
</Target>
Run Code Online (Sandbox Code Playgroud)

ClickOnce的文件ClickOnce.applicationClickOnce.exeClickOnce.exe.manifest。我dotfuscator.xml的文件夹与项目文件位于同一文件夹中。关键是最后一个命令,将ClickOnce文件复制到该obj文件夹。