【问题标题】:Include other than C# code files包含 C# 以外的代码文件
【发布时间】:2018-05-22 03:23:49
【问题描述】:

我的大型项目将 XML 配置文件作为输入。我有这些 XML 的 XSD 架构。 XSD 与任何其他 C# 代码文件一样放置在 Visual Studio 中。我想将架构导入 exe,这样没有人可以更改它并随之更改程序本身。

我想从代码中解决 XSD 架构,如下所示:

XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("confcheck", MyProject.Configuration.ConfSchema );

其中 Configuration 是我的代码文件之间带有架构的文件夹

【问题讨论】:

  • 作为嵌入式资源?
  • I want to import the schema into exe so no one can change it and with it change the program itself. 如果只是这个原因,那就不用麻烦了……可以修改……
  • 是的,最好作为嵌入式资源。
  • 看看这个答案,它描述了如何将文本文件作为嵌入式资源读取。 stackoverflow.com/a/49203966/9365244
  • @Eser 您可以对可执行文件进行签名,这样如果它被更改,则强制取消签名。如果目标是防止某人将程序更改为恶意程序,然后在他们没有意识到它已被更改的情况下将其重新分发给其他人,您可以解决它(通过告诉人们不要信任您的可执行文件的未签名版本)。您无法防御的是有人更改程序然后自己运行它,因为他们可以忽略他们更改的版本未签名的事实。

标签: c# visual-studio


【解决方案1】:

一般来说,我建议将配置放在项目附带的配置文件中(您可以从该文件中创建和加载自定义配置部分),但是您可以采取几种方法来按照您的描述进行操作 - 所有其中涉及构建操作(右键单击对象然后属性):

  1. 将构建操作更改为嵌入式资源then go here
  2. 将构建操作更改为内容并将复制到输出目录设置为“始终” - 然后,您可以通过编程方式将其打开并在运行时对其进行序列化(确保在代码中构建相对于执行目录的路径)

请记住,如果您将其设为内容并将其复制到输出文件夹,任何有权访问安装目录的人都可以打开并修改它们 - 嵌入式资源也不是完全 100% 防篡改,但对于新手来说更是如此。

【讨论】:

  • 这行得通。不需要set copy to output directory as "always"。它将这些嵌入文件复制到 exe 文件夹中。但是这个文件实际上并没有被使用。无论如何感谢您的解决方案。
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2015-10-17
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多