【问题标题】:C# File Path Within Class Library类库中的 C# 文件路径
【发布时间】:2017-10-20 01:57:27
【问题描述】:

我有一个调用类库 (ProcessFile) 的控制台应用程序 (MasterApp)。 ProcessFile 内部的一个函数接收一个 xml 文档并根据 xsd 对其进行验证。 xsd 存储在 ProcessFile 项目下的文件夹下。我目前正在使用绝对路径读取文件。

我希望能够将我的 MasterApp 部署到服务器,但我可以让它工作的唯一方法是如果我也复制 ProcessFile 项目文件夹,因为我使用的是绝对路径。如果可以的话,我不想使用绝对路径。

有没有办法将 xsd 保留在 ProcessFile 库下,但能够在服务器上运行 MasterApp 时使用它?有什么我需要做的构建过程吗?

我曾考虑将 xsd 放在 MasterApp 下的文件夹下,但我正在尝试尽可能多地将 MasterApp 与 ProcessFile 分离。 ProcessFile 应该能够针对 xsd 进行验证,而 MasterApp 不知道 xsd。

【问题讨论】:

  • 将 XSD 文件的路径放在配置选项中,然后将此路径传递给您的库,该库现在知道如何找到该文件。其他选项是假设文件位于程序运行的同一文件夹中并打开它而不提供任何路径
  • 你是如何存储/访问文件路径的..它是硬编码的..?还是存储在 .config 文件中..:?你能找到exe所在的路径吗..?
  • @MethodMan 文件路径当前是硬编码的。由于我只是将 MasterApp 部署到服务器,因此 xsd 不会被复制,因为我没有部署 ProcessFile。
  • @Steve 如何将 xsd 复制到 MasterApp 在构建期间可以访问的位置?如果我使用“复制到输出目录”,那只是将它输出到 ProcessFile 的 bin 文件夹。
  • 不要对你的路径进行硬编码@dburger,将路径存储在 .config 文件中。这样以后如果你需要更改路径。你可以在 .config 中更改它文件,每次更改时不必重新编译为代码

标签: c# xsd directory


【解决方案1】:

您可以将架构嵌入到 ProcessFile/MasterApp 程序集中,并在需要验证 xml 时将其提取出来。如果您不确定如何嵌入,请阅读this.

// Get the assembly that contains the embedded schema
var assembly = Assembly.GetExecutingAssembly();
using (var stream = assembly.GetManifestResourceStream("namespace.Yourschema.xsd"))
using (var reader = XmlReader.Create(stream))
{
    XmlSchema schema = XMLSchema.Read(reader, new ValidationEventHandler(ValidationEventHandler));
}

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    相关资源
    最近更新 更多