我在Visual Studio 2012 C#中创建了一个项目。我添加了一个文件.xml
,该文件包含控制台在执行时读取的信息。
我需要发布它,以便我可以运行它并将其提供给要求我这样做的人。
就是.exe
可以在调试目录中找到该文件,但这对我不起作用,因为当我在另一台计算机上运行它时,它说它缺少与控制台相关的文件(文件xml
)
当我发布控制台时,它在发布目录中为我提供了一些文件,但它不包含它xml
,我不必包含它以使其可见,因为它包含私人信息。
我怎么能这样做?
XML 文件语法:
<root>
<url></url>
</root>
在我使用的代码中XmlDocument
,我加载了通过标记调用它的 xml 文件,即GetElementsByTagName
,因此我引用了我想在循环中调用的标记for
。
假设您的 IDE 是 Visual Studio,那么您可以将文件作为资源
xml
嵌入其中。.exe
在要添加它的项目的属性中,转到 //add 页面
Recursos
(Agregar recurso
这archivo existente.
与配置 IDE 的语言不同)加载资源后,您将能够在“属性”文件夹中查看它。
通过代码加载文件的方法之一是:
MiArchivoCargado
你之前上传的文件在哪里!为了使 XML 出现在文件夹中,将 XML 文件添加到项目中,添加后右键单击属性。
在那里您可以找到Build Action选项并使用Copy if newer进行设置。
但是,您说您不想这样做是因为私有数据,关键是如果应用程序必须访问该数据,那么它永远不会是私有的,高级用户无论如何都可以访问它。
作为替代方案,它不会 100% 保护您,它们只会使数据更难访问:
在任何情况下,您都可以加密内容并让应用程序对其进行解密,在这种情况下,您必须将证书嵌入到
exe
.保留嵌入 XML的选项应该让您考虑一下。
另一个更复杂的替代方案是,应用程序不读取任何文件,而是从 Web 服务请求这些参数,是否加密取决于您。
作为一个额外的事实,应用程序的参数配置数据很少被用户访问,在你的位置我会保留 XML 并且私有信息会对其进行加密,只能由应用程序通过嵌入的证书解密,该证书在高级用户也可以访问它。
正如他们告诉您的那样,您可以嵌入文件(在同一个程序集中),但您将无法轻松修改它(除非它是通过代码)您还可以有一个“默认”文件,它总是在编译和您的应用程序总是尝试从调用程序集 (.exe) 的位置读取它
第 1 课:使用文件路径保存配置变量
对于具有 xml 文件的项目和其他类型的资源,我们使用ConfigurationManager 的 AppSettings 因此,您可以转到控制台项目的属性并在 Configuration(Settings) 中添加配置项,例如“PathFile”,如下所示 :然后就可以使用它了:
将其分开(并将其定位在路径中)的好处是易于更改/更新它,您可以在多个应用程序中使用它
话题2:为了保护...
您将别无选择,只能加密(就像您建议的那样),如果您想要它,最好使用Windows 数据保护 API (DPAPI),因为它使用每台机器的唯一密钥,因此您不必共享钥匙。但请记住,由于它在每台机器上都是唯一的,因此当您将相同的 XML 带到另一台加密的机器上时,它将无法工作。但也是第一次,您必须在将要使用它的机器上“加密”文件(这里通常有一个应用程序只执行一次,或者同一个控制台......具有加密命令一个文件)我留给你调查ProtectedData提供加密和解密数据的方法。
好处是您不需要共享密钥(但坏事也是因为它在每台机器/服务器上都是唯一的)您无法在另一台机器上解密(但我认为您可以使用另一种机制与 DPAPI 来做此外,您必须看到“第一次”,也就是说,当您使用文件(未压缩)安装应用程序时,您可以执行我们在项目中曾经做过的事情(有一个 .xml 文件,如果它没有加密,它第一次加密文件.dat或类似的东西,然后它使用那个文件)我们用配置完成了所有这些
可以帮助或指导您的链接