【发布时间】:2017-11-15 11:25:14
【问题描述】:
我的窗口窗体应用程序有 XML 配置文件。每次我使用单击一次发布它时,我都需要使用一种方法(已经有)加密这个文件。因此,在已部署的工具版本中,用户将无法读取该 xml 文件。我使用了 BeforePublish 参考:https://msdn.microsoft.com/en-us/library/ms366724.aspx
我在 .csproj 文件中添加了以下几行
<UsingTask TaskName="TestProject.SimpleTask" AssemblyName="TestProject" TaskFactory="SimpleTask" />
<Target Name="BeforePublish">
<SimpleTask />
</Target>
并添加了一个新类,如下所示:
public class SimpleTask : Microsoft.Build.Utilities.Task
{
public override bool Execute()
{
File.WriteAllText(@"D:\test.txt", "Working");
//Will add code to encrypt xml file here
return true;
}
}
但是当我尝试发布应用程序时,它给出了以下错误:
The task factory "SimpleTask" could not be loaded from the assembly "TestProject". Could not load file or assembly 'TestProject' or one of its dependencies. The system cannot find the file specified.
SimpleTask 不依赖于任何其他 dll。请帮帮我。 如果同一问题有其他解决方案,也请提出建议。提前致谢。
【问题讨论】:
-
您知道,如果您的应用程序可以解密文件,那么聪明的用户也可以。我假设您正在使用 DPAPI?这并不是为了向经过身份验证的用户隐藏东西,而是为了向可能登录到同一台电脑或获得文件系统访问权限的其他人隐藏东西。
-
我正在使用 rijndaelmanaged 来加密文件。但是,一旦从 Visual Studio 触发发布事件,我就需要调用一个方法。
-
我之前使用过自定义构建任务,但没有单击一次。我在
UsingTask中使用此属性:`AssemblyFile="$(ProjectDir)\folder_if_any\your_assembly.dll`。如果您签署程序集并将其安装在 GAC 中,它也可能有效。 -
@Crowcoder,因为它是一个 winform 应用程序,.dll 在 Project\bin\debug 中不存在,而是我有 .exe... 我可以将 .exe 的路径作为程序集... ?
-
你的构建任务是一个winforms应用?我不知道这是否可行,我不希望您希望在发布过程中需要用户交互,但我想这可能是可能的。但是,如果您在本地存储加密密钥,那么您将遇到与 DPAPI 相同的问题 - 如果应用程序可以解密,那么用户也可以。如果这确实是敏感信息,则应将操作发送到安全服务器进行处理,例如通过 Web api 或其他方式。
标签: c# xml visual-studio encryption publish