如果要发布一个ClickOnce版本,它如何被Dotfuscator混淆?
9 回答
您可以使用 Dotfuscator 的商业版本通过将部署清单(“foo.application”)添加为 Dotfuscator 项目的输入来自动混淆 ClickOnce 应用程序。Dotfuscator 将允许您向 ClickOnce 应用程序中包含的程序集添加任何必要的排除项,并将创建包含混淆程序集的更新部署和应用程序清单。
Visual Studio(包括 Visual Studio 2010)中包含的免费版 Dotfuscator 没有自动混淆 ClickOnce 应用程序的功能。为了获得功能正常的混淆 ClickOnce 应用程序,您需要重新创建或更新 ClickOnce 清单,因为混淆会更改程序集的签名。
您可以使用mage.exe或mageui.exe(包含在 Windows/.NET SDK 中)来更新 ClickOnce 清单。如果您要使用 mage.exe,您需要注意不能在 ClickOnce 选项中使用“使用 .deploy 文件扩展名”选项,因为它无法识别它。
假设您的 ClickOnce 应用程序名为“Foo”并且版本为 1.0.0.0,您将要遵循的过程是:
- 将 ClickOnce 应用程序发布到磁盘上的目录
- 运行 Dotfuscator CE 并从项目的 bin 目录中添加要混淆的程序集
- 混淆程序集。默认情况下,经过混淆的程序集将放入名为“Dotfuscated”的子目录中。
- 使用 sn.exe 退出您的混淆程序集(仅当您最初对它们进行强命名时)
- 将混淆的程序集复制到 ClickOnce publish\Application Files\Foo_1_0_0_0 目录中的程序集之上
更新应用程序清单并将其退出:
mage.exe -Update "Application Files\Foo_1_0_0_0\Foo.exe.manifest" -CertFile "c:\Foo\foo.pfx" -Password 密码
更新部署清单并将其退出:
mage.exe -Update Foo.application -AppManifest "Application Files\Foo_1_0_0_0\Foo.exe.manifest" -CertFile "c:\Foo\foo.pfx" -Password 密码
您现在拥有使用混淆程序集的有效应用程序和部署清单。您也可以使用 MageUI.exe 工具来完成相同的任务(它知道如何处理带有 .deploy 扩展名的程序集),但自动化并不容易。
我有一个类似于 Joe Kuemerle 的解决方案,但在发布过程之前。这适用于在Visual Studio和MSBuild命令行中发布。
将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>
ClickOnce 文件是ClickOnce.application
、ClickOnce.exe
和ClickOnce.exe.manifest
. Mydotfuscator.xml
与项目文件位于同一文件夹中。关键是最后一条命令,将 ClickOnce 文件复制到obj
文件夹中。
是的,这些是兼容的技术。ClickOnce 只关注将应用程序及其相关二进制文件部署到目标机器上。Dotfuscator 会混淆 DLL 和 EXE 文件。只要您在发布应用程序之前运行 Dotfuscator,它们就会一起工作。
我不知道这是否仅在更高版本的 Visual Studio 中才有可能,但对我来说它工作得很好:
- 在发布模式下构建可执行文件
- 启动您选择的 exe 修改器并修改obj/Release/<filename>.exe中的文件(注意:不是bin/而是obj/)
- 按下 Visual Studio 的Publish Now按钮,它假定上次构建是最新的
- 利润:D
如果您使用的是 VS2010,它附带的 Dotfuscator 会混淆文件,然后为您重新签署清单。[编辑——除非你购买完整版,否则这不是真的;它就像 VS2008 一样工作。]
如果您使用的是 VS2008,则需要发布、混淆文件,然后使用 Mage 或 MageUI 重新签署清单。
deepsea 混淆器与 clickonce 一起工作
Eziriz .NET Reactor 具有出色的 ClickOnce 集成。
see microsoft onling document:Walkthrough: Manually Deploying a ClickOnce Application
我是从论坛帖子How to deal with ClickOnce的回答中得到的。