在构建过程中自动加密App.config文件

7

目前,我的应用程序在首次启动时自动加密其自身的App.config文件。

我正在使用ConfigurationManager类,如此文章所示:

现在我希望在应用程序首次启动之前就已经对App.config进行了加密。

原因是我已经将安装程序添加到解决方案中,我不想让安装程序删除未加密的App.config。我希望这个过程自动化。

(我目前想到的唯一方法是在Post-Build事件中附加一个.exe文件,但难道没有更直接的方法吗?)


1
一个作为预构建事件安排的外部工具是最好的方法。这样,当您的设置项目构建时,app.config已经被加密了。 - rmrrm
我正在使用Windows安装程序项目,因此不知道如何为安装程序项目设置预构建事件。因此,我考虑从主输出项目的后构建事件中调用控制台应用程序。但是,我计划在调用我的控制台应用程序之前使用Cruise Control并构建安装程序项目,这基本上就是您建议的内容。谢谢。 - JohnB
大多数Visual Studio项目都有预构建事件。您使用的是哪种项目类型? - rmrrm
1
如果您在进行构建的计算机上加密了app.config,那么这是否意味着它只能在该计算机上解密?因此,如果您稍后将其安装到另一台计算机上,它如何解密? - Stephen McDaniel
@Stephen McDaniel:是的,那是正确的!:( 所以我尝试了一种方法,在用户安装期间加密app.config文件(http://www.codeproject.com/KB/security/ProtectedConfigWinApps.aspx)。然而,它抛出了一个异常。我查找了保护WinForms应用程序的app.config文件的解决方案,但没有找到好的解决方案。我一定是个白痴。 - JohnB
显示剩余2条评论
2个回答

3

第一种选择:使用内置的MSBuild Exec Task 执行自己编写的实用程序,该实用程序能够加密配置文件。

第二种选择:自己编写MSBuild任务

我相信您可以编写一个简单的MSBuild任务,该任务将查找App.Config文件,并在解决方案构建时对其进行加密。

  1. 创建一个名为EncryptConfig.targets的新MSBuild目标
  2. 通过<Import Project="EncryptConfig.targets" />更新csproj文件
  3. 在csproj中为标准的AfterBuild目标添加DependsOnTargets
 <Target Name="AfterBuild" DependsOnTargets="EncryptConfig.targets" />

4) 在 EncryptConfig.targets 中编写自己的任务并执行它。

如何编写自己的任务:


2
+1 - 你也可以在PostBuildEvent中执行自己的实用程序.exe(这是我现在正在做的事情)。例如:<PostBuildEvent>if $(ConfigurationName) == Release $(TargetDir)\AppConfigEncryptor.exe $(TargetPath)</PostBuildEvent> - JohnB

1
你可以在要部署的同一应用程序中编写加密代码。使用主args开关执行它。这样,PostBuild事件就可以使用加密配置文件的开关运行您自己的应用程序。这样,您可以将加密任务的所有功能上下文专用于您的应用程序(例如,如果您想为不同的应用程序加密不同的部分)。我在应用程序中使用预编译指令仅在发布时进行加密。我认为像上面建议的在PostBuild事件中执行此操作更有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接